Перемещение файлов из одной папки в другую C#
Ребята, я пытаюсь переместить все файлы, заканчивающиеся на _DONE, в другую папку.
Я пытался
//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);
Но при выполнении этих кодов я получаю сообщение об ошибке.
The given path's format is not supported.
Где я ошибся ?
4 ответа:
Ваши косые черты находятся в неправильном направлении. На окнах вы должны использовать обратные косые черты. Например,
string rootFolderPath = @"F:\model_RCCMREC\"; string destinationPath = @"F:\model_RCCMrecTransfered\";
Массив имен файлов, возвращаемых из
System.IO.Directory.GetFiles()
, содержит их полный путь. (См. http://msdn.microsoft.com/en-us/library/07wt70x2.aspx ) это означает, что добавление исходного и конечного каталогов к значениюfile
не будет тем, что вы ожидаете. В итоге вы получите значения типаF:\model_RCCMREC\F:\model_RCCMREC\something_DONE.wav
вfileToMove
. Если вы установите точку останова в строкеFile.Move()
, Вы можете посмотреть на передаваемые значения, что может помочь отладить подобную ситуацию.Вкратце, вам нужно будет определить относительный путь от
rootFolderPath
к каждому файлу для определения правильного пути назначения. Взгляните на классSystem.IO.Path
(http://msdn.microsoft.com/en-us/library/system.io.path.aspx ) для методов, которые помогут. (В частности, вы должны рассмотретьPath.Combine()
, а не+
для построения путей.)
Я сделал это так:
if (Directory.Exists(directoryPath)) { foreach (var file in new DirectoryInfo(directoryPath).GetFiles()) { file.MoveTo($@"{newDirectoryPath}\{file.Name}"); } }
File-это тип класса FileInfo. У него уже есть метод MoveTo (), который принимает путь назначения.
Пожалуйста, попробуйте следующую функцию. Это прекрасно работает.
Функция:
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)); } }