manejo - Mover archivos de una carpeta a otra C#
manejo de carpetas c# (4)
La matriz de nombres de archivos devueltos desde System.IO.Directory.GetFiles()
incluye su ruta completa. (Consulte http://msdn.microsoft.com/en-us/library/07wt70x2.aspx ) Esto significa que agregar los directorios de origen y destino al valor del file
no va a ser lo que espera. Terminará con valores como F:/model_RCCMREC/F:/model_RCCMREC/something_DONE.wav
en fileToMove
. Si establece un punto de interrupción en la línea File.Move()
, puede mirar los valores que está pasando, lo que puede ayudar a depurar una situación como esta.
Brevemente, deberá determinar la ruta relativa de rootFolderPath
a cada archivo para determinar la ruta de destino correcta. Eche un vistazo a la clase System.IO.Path
( http://msdn.microsoft.com/en-us/library/system.io.path.aspx ) para conocer los métodos que le ayudarán. (En particular, debe considerar Path.Combine()
lugar de +
para construir rutas).
Chicos, estoy tratando de mover todos los archivos que terminan con _DONE a otra carpeta.
Lo intenté
//take all files of main folder to folder model_RCCMrecTransfered
string rootFolderPath = @"F:/model_RCCMREC/";
string destinationPath = @"F:/model_RCCMrecTransfered/";
string filesToDelete = @"*_DONE.wav"; // Only delete WAV files ending by "_DONE" in their filenames
string[] fileList = System.IO.Directory.GetFiles(rootFolderPath, filesToDelete);
foreach (string file in fileList)
{
string fileToMove = rootFolderPath + file;
string moveTo = destinationPath + file;
//moving file
File.Move(fileToMove, moveTo);
Pero al ejecutar estos códigos me sale un error diciendo.
The given path''s format is not supported.
Qué hice mal ?
Lo hice de esta manera:
if (Directory.Exists(directoryPath))
{
foreach (var file in new DirectoryInfo(directoryPath).GetFiles())
{
file.MoveTo($@"{newDirectoryPath}/{file.Name}");
}
}
archivo es un tipo de clase FileInfo. Ya tiene un método llamado MoveTo () que toma una ruta de destino.
Por favor, intente la siguiente función. Esto funciona bien.
Función:
public static void DirectoryCopy(string strSource, string Copy_dest)
{
DirectoryInfo dirInfo = new DirectoryInfo(strSource);
DirectoryInfo[] directories = dirInfo.GetDirectories();
FileInfo[] files = dirInfo.GetFiles();
foreach (DirectoryInfo tempdir in directories)
{
Console.WriteLine(strSource + "/" +tempdir);
Directory.CreateDirectory(Copy_dest + "/" + tempdir.Name);// creating the Directory
var ext = System.IO.Path.GetExtension(tempdir.Name);
if (System.IO.Path.HasExtension(ext))
{
foreach (FileInfo tempfile in files)
{
tempfile.CopyTo(Path.Combine(strSource + "/" + tempfile.Name, Copy_dest + "/" + tempfile.Name));
}
}
DirectoryCopy(strSource + "/" + tempdir.Name, Copy_dest + "/" + tempdir.Name);
}
FileInfo[] files1 = dirInfo.GetFiles();
foreach (FileInfo tempfile in files1)
{
tempfile.CopyTo(Path.Combine(Copy_dest, tempfile.Name));
}
}
Tus barras están en la dirección equivocada. En las ventanas debes usar barras diagonales. P.ej
string rootFolderPath = @"F:/model_RCCMREC/";
string destinationPath = @"F:/model_RCCMrecTransfered/";