Mover todos los archivos de una carpeta a otra en C#
Esta publicación discutirá cómo mover todos los archivos de una carpeta a otra en C#.
1. Usando Directory.Move()
método
La solución estándar para mover un directorio y todo su contenido a una nueva ubicación es el Directory.Move() método. Acepta la ruta del directorio a mover y la ruta de destino. Funciona creando un nuevo directorio de destino y moviendo todo el contenido de la carpeta de origen a él. El movimiento incluye todos los archivos y subdirectorios presentes en el directorio de origen. Finalmente, elimina el directorio de origen. Tenga en cuenta que tanto el origen como el destino pueden ser rutas relativas o absolutas.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
using System; using System.IO; public class Program { public static void Main() { string srcDir = @"C:\source"; string destDir = @"C:\destination"; Directory.Move(srcDir, destDir); } } |
Si intenta moverse a un directorio que ya existe, el sistema lanzará un IOException
excepción. Si la ruta de origen especificada no es válida, el DirectoryNotFoundException
se lanza una excepción. Antes de invocar el Directory.Move()
método, es posible que desee verificar explícitamente si la carpeta de origen existe y el destino no.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
using System; using System.IO; public class Program { public static void Main() { string srcDir = @"C:\source"; string destDir = @"C:\destination"; if (Directory.Exists(srcDir) && !Directory.Exists(destDir)) { Directory.Move(srcDir, destDir); } } } |
Si desea sobrescribir el directorio de destino si ya existe, puede hacerlo invocando el Directory.Delete()
método. El siguiente ejemplo ilustra.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
using System; using System.IO; public class Program { public static void Main() { string srcDir = @"C:\source"; string destDir = @"C:\destination"; if (Directory.Exists(srcDir)) { if (Directory.Exists(destDir)) { Directory.Delete(destDir, true); } Directory.Move(srcDir, destDir); } } } |
2. Usando FileInfo.MoveTo()
método
Si necesita mover solo los archivos presentes en la ubicación de origen al destino, puede hacerlo usando el MoveTo()
método de la FileInfo
clase. Toma la ruta de destino y mueve el archivo especificado a ella. Para mover todos los archivos en un directorio, necesita invocar individualmente el MoveTo()
método para cada archivo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
using System; using System.IO; public class Program { public static void Main() { string srcDir = @"C:\source"; string destDir = @"C:\destination"; DirectoryInfo dir = new DirectoryInfo(srcDir); foreach (FileInfo file in dir.GetFiles()) { file.MoveTo($@"{destDir}\{file.Name}"); } } } |
El sistema arroja DirectoryNotFoundException
si el directorio de origen o de destino no existe. Además, FileInfo.MoveTo()
no puede sobrescribir un archivo existente en el directorio de destino, y IOException
es elevado. El siguiente programa maneja ambos:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
using System; using System.IO; public class Program { public static void Main() { string srcDir = @"C:\source"; string destDir = @"C:\destination"; if (Directory.Exists(srcDir) && Directory.Exists(destDir)) { DirectoryInfo dir = new DirectoryInfo(srcDir); foreach (FileInfo file in dir.GetFiles()) { string destFile = Path.Combine(destDir, file.Name); if (!File.Exists(destFile)) { file.MoveTo(destFile); } } } } } |
3. Usando File.Move()
método
Como alternativa, puede utilizar el File.Move()
método para mover todos los archivos presentes en el directorio de origen al directorio de destino. Similar a MoveTo()
método, necesita invocar el Move()
método para cada archivo.
El siguiente ejemplo de código muestra cómo llamar a este método. Tenga en cuenta que utiliza el EnumerateFiles()
método sobre el GetFiles()
método, que devuelve una colección enumerable de nombres de archivo en lugar de cargar todos los nombres de archivo en la memoria.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
using System; using System.IO; public class Program { public static void Main() { string srcDir = @"C:\source"; string destDir = @"C:\destination"; foreach (string file in Directory.EnumerateFiles(srcDir)) { string destFile = Path.Combine(destDir, Path.GetFileName(file)); File.Move(file, destFile); } } } |
El programa anterior arroja DirectoryNotFoundException
si alguno de los directorios no existe. Además, si ya existe un archivo en el directorio de destino, el IOException
se lanza una excepción. Ambos casos se pueden manejar de la siguiente manera:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
using System; using System.IO; public class Program { public static void Main() { string srcDir = @"C:\source"; string destDir = @"C:\destination"; if (Directory.Exists(srcDir) && Directory.Exists(destDir)) { foreach (string file in Directory.EnumerateFiles(srcDir)) { string destFile = Path.Combine(destDir, Path.GetFileName(file)); if (!File.Exists(destFile)) { File.Move(file, destFile); } } } } } |
Se trata de mover todos los archivos de una carpeta a otra en C#.