Cómo copiar un archivo a otra ruta?

Necesito copiar un archivo a otra ruta, dejando el original donde está.

También quiero poder cambiar el nombre del archivo.

¿Funcionará el método CopyTo de FileInfo?

Eche un vistazo a File.Copy ()

Usando File.Copy puede especificar el nuevo nombre de archivo como parte de la cadena de destino.

Así que algo así como

File.Copy(@"c:\test.txt", @"c:\test\foo.txt"); 

Consulte también Cómo copiar, eliminar y mover archivos y carpetas (Guía de progtwigción C #)

Traté de copiar un archivo xml de una ubicación a otra. Aquí está mi código:

 public void SaveStockInfoToAnotherFile() { string sourcePath = @"C:\inetpub\wwwroot"; string destinationPath = @"G:\ProjectBO\ForFutureAnalysis"; string sourceFileName = "startingStock.xml"; string destinationFileName = DateTime.Now.ToString("yyyyMMddhhmmss") + ".xml"; // Don't mind this. I did this because I needed to name the copied files with respect to time. string sourceFile = System.IO.Path.Combine(sourcePath, sourceFileName); string destinationFile = System.IO.Path.Combine(destinationPath, destinationFileName); if (!System.IO.Directory.Exists(destinationPath)) { System.IO.Directory.CreateDirectory(destinationPath); } System.IO.File.Copy(sourceFile, destinationFile, true); } 

Luego llamé a esta función dentro de una función timer_elapsed de cierto intervalo que creo que no necesita ver. Funcionó. Espero que esto ayude.

Sí. Funcionará: Método FileInfo.CopyTo

Use este método para permitir o evitar la sobrescritura de un archivo existente. Utilice el método CopyTo para evitar la sobrescritura de un archivo existente de forma predeterminada.

Todas las demás respuestas son correctas, pero desde que solicitó FileInfo , aquí hay una muestra:

 FileInfo fi = new FileInfo(@"c:\yourfile.ext"); fi.CopyTo(@"d:\anotherfile.ext", true); // existing file will be overwritten 

También puede usar File.Copy para copiar y File.Move para cambiar el nombre de palabras posteriores.

 // Copy the file (specify true or false to overwrite or not overwrite the destination file if it exists. File.Copy(mySourceFileAndPath, myDestinationFileAndPath, [true | false]); // EDIT: as "astander" notes correctly, this step is not necessary, as File.Copy can rename already... // However, this code could be adapted to rename the original file after copying // Rename the file if the destination file doesn't exist. Throw exception otherwise //if (!File.Exists(myRenamedDestinationFileAndPath)) // File.Move(myDestinationFileAndPath, myRenamedDestinationFileAndPath); //else // throw new IOException("Failed to rename file after copying, because destination file exists!"); 

EDITAR
Comentó el código de “cambio de nombre”, porque File.Copy ya puede copiar y cambiar el nombre en un paso, como se observó correctamente en los comentarios.

Sin embargo, el código de cambio de nombre podría adaptarse si el OP desea cambiar el nombre del archivo de origen después de haber sido copiado a una nueva ubicación.

File :: Copy copiará el archivo en la carpeta de destino y File :: Move puede mover y cambiar el nombre de un archivo.

 string directoryPath = Path.GetDirectoryName(destinationFileName); // If directory doesn't exist create one if (!Directory.Exists(directoryPath)) { DirectoryInfo di = Directory.CreateDirectory(directoryPath); } File.Copy(sourceFileName, destinationFileName); 

Esto es lo que hice para mover un archivo de prueba de las descargas al escritorio. Espero que sea útil.

 private void button1_Click(object sender, EventArgs e)//Copy files to the desktop { string sourcePath = @"C:\Users\UsreName\Downloads"; string targetPath = Environment.GetFolderPath(Environment.SpecialFolder.Desktop); string[] shortcuts = { "FileCopyTest.txt"}; try { listbox1.Items.Add("Starting: Copy shortcuts to dektop."); for (int i = 0; i < shortcuts.Length; i++) { if (shortcuts[i]!= null) { File.Copy(Path.Combine(sourcePath, shortcuts[i]), Path.Combine(targetPath, shortcuts[i]), true); listbox1.Items.Add(shortcuts[i] + " was moved to desktop!"); } else { listbox1.Items.Add("Shortcut " + shortcuts[i] + " Not found!"); } } } catch (Exception ex) { listbox1.Items.Add("Unable to Copy file. Error : " + ex); } } 

PARA copiar la carpeta Uso dos cuadros de texto para saber el lugar de la carpeta y el cuadro de texto de la antera Para saber qué carpeta copiar y este es el código

 MessageBox.Show("The File is Create in The Place Of The Programe If you Don't Write The Place Of copy And You write Only Name Of Folder");// It Is To Help The User TO Know if (Fromtb.Text=="") { MessageBox.Show("Ples You Should Write All Text Box"); Fromtb.Select(); return; } else if (Nametb.Text == "") { MessageBox.Show("Ples You Should Write The Third Text Box"); Nametb.Select(); return; } else if (Totb.Text == "") { MessageBox.Show("Ples You Should Write The Second Text Box"); Totb.Select(); return; } string fileName = Nametb.Text; string sourcePath = @"" + Fromtb.Text; string targetPath = @"" + Totb.Text; string sourceFile = System.IO.Path.Combine(sourcePath, fileName); string destFile = System.IO.Path.Combine(targetPath, fileName); if (!System.IO.Directory.Exists(targetPath)) { System.IO.Directory.CreateDirectory(targetPath); //when The User Write The New Folder It Will Create MessageBox.Show("The File is Create in "+" "+Totb.Text); } System.IO.File.Copy(sourceFile, destFile, true); if (System.IO.Directory.Exists(sourcePath)) { string[] files = System.IO.Directory.GetFiles(sourcePath); foreach (string s in files) { fileName = System.IO.Path.GetFileName(s); destFile = System.IO.Path.Combine(targetPath, fileName); System.IO.File.Copy(s, destFile, true); } MessageBox.Show("The File is copy To " + Totb.Text); } 
 File.Move(@"c:\filename", @"c:\filenamet\filename.txt");