2010-10-07 16 views
44

Si se cumplen ciertas condiciones, quiero copiar un archivo de un directorio a otro SIN borrar el archivo original. También quiero establecer el nombre del nuevo archivo en un valor particular.C# Copie un archivo a otra ubicación con un nombre diferente

Estoy usando C# y estaba usando la clase FileInfo. Si bien tiene el método CopyTo. No me da la opción de establecer el nombre del archivo. Y el método MoveTo mientras me permite cambiar el nombre del archivo, elimina el archivo en la ubicación original.

¿Cuál es la mejor manera de hacerlo?

Respuesta

93
System.IO.File.Copy(oldPathAndName, newPathAndName); 
8

Utilice la File.Copy método en lugar

por ejemplo.

File.Copy(@"C:\oldFile.txt", @"C:\newFile.txt"); 

Puede llamarlo como lo desee en el archivo nuevo, y le dará un nuevo nombre.

+1

¿Sería el que downvoted que cuidar a elaborar ?? – w69rdy

29

También puede probar el método Copy:

File.Copy(@"c:\work\foo.txt", @"c:\data\bar.txt") 
0

Puede utilizar el método sea File.Copy (oldFilePath, newFilePath) u otra manera se, lectura de archivos utilizando StreamReader en una cadena y luego usar StreamWriter para escribir el archivo a la ubicación de destino.

Su código podría tener este aspecto:

StreamReader reader = new StreamReader("C:\foo.txt"); 
string fileContent = reader.ReadToEnd(); 

StreamWriter writer = new StreamWriter("D:\bar.txt"); 
writer.Write(fileContent); 

Se puede añadir código de control de excepciones ...

+0

no necesitarías un lector/escritor para eso, solo la transmisión estaría bien. También; Las secuencias alternativas NTFS y cosas como auditoría/seguridad no se copiarán si solo copia la secuencia (predeterminada). –

+0

@March Gravell, Gracias por sus entradas. No sé mucho sobre flujos alternativos NTFS ... supongo que necesito aprender sobre eso. – Shekhar

1

Usted puede utilizar el método Copy en la clase System.IO.File.

4

Un método es:

File.Copy(oldFilePathWithFileName, newFilePathWithFileName); 

O puede utilizar el método FileInfo.CopyTo() también algo como esto:

FileInfo file = new FileInfo(oldFilePathWithFileName); 
file.CopyTo(newFilePathWithFileName); 

Ejemplo:

File.Copy(@"c:\a.txt", @"c:\b.txt"); 

o

FileInfo file = new FileInfo(@"c:\a.txt"); 
file.CopyTo(@"c:\b.txt"); 
8

Si desea utilizar única clase FileInfo probar esto

   string oldPath = @"C:\MyFolder\Myfile.xyz"; 
      string newpath = @"C:\NewFolder\"; 
      string newFileName = "new file name"; 
      FileInfo f1 = new FileInfo(oldPath); 
      if(f1.Exists) 
      { 
       if(!Directory.Exists(newpath)) 
       { 
        Directory.CreateDirectory(newpath); 
       } 
       f1.CopyTo(string.Format("{0}{1}{2}", newpath, newFileName, f1.Extension)); 
      } 
2
StreamReader reader = new StreamReader(Oldfilepath); 
string fileContent = reader.ReadToEnd(); 

StreamWriter writer = new StreamWriter(NewFilePath); 
writer.Write(fileContent); 
+1

Tenga en cuenta que reader.ReadToEnd() cargará todo el contenido del archivo en la memoria. El tamaño de archivo máximo teóricamente aceptable es de 2 GB, pero esto podría representar un problema incluso con archivos (relativamente) más pequeños, especialmente si su proceso tiene poca memoria en caso contrario. – Val

1

El método más sencillo que puede utilizar es la siguiente:

System.IO.File.Replace(string sourceFileName, string destinationFileName, string destinationBackupFileName); 

Esto se hará cargo de todo lo que ha solicitado.

2
File.Copy(@"C:\oldFile.txt", @"C:\newFile.txt", true); 

¡No olvide sobrescribir el archivo anterior! Asegúrese de agregar el tercer parámetro. Al agregar el tercer parámetro, permite sobrescribir el archivo. De lo contrario, podría utilizar una captura de prueba para la excepción.

Saludos, G

Cuestiones relacionadas