2013-10-31 288 views
16

夥計們我試圖將所有以_DONE結尾的文件移動到另一個文件夾中。將文件從一個文件夾移動到另一個C#

我試圖

//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. 

我哪裏出錯了?

+0

我不知道窗口中的文件傳輸是否支持'_' – Rohit

回答

15

您的斜線錯誤。在Windows上,你應該使用反斜槓。例如。

string rootFolderPath = @"F:\model_RCCMREC\"; 
string destinationPath = @"F:\model_RCCMrecTransfered\"; 
+0

您的意思是,「在Windows上,您不應該使用正斜槓」? – Skylark

+0

我做到了。感謝您糾正我4年前的語法。我相信這個補充說明對其他人有用。 – codemonkeh

+0

有點奇怪,有這麼多的流量,它沒有注意到之前。 – Skylark

6

文件名稱數組返回從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()而不是+建築路徑。)

+0

謝謝,完成;) –

+0

這是正確的答案。 – richardwhatever

0

請嘗試以下功能。這工作正常。

功能:

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)); 

     } 
} 
0

我做這樣說:

if (Directory.Exists(directoryPath)) 
{ 
    foreach (var file in new DirectoryInfo(directoryPath).GetFiles()) 
    { 
     file.MoveTo([email protected]"{newDirectoryPath}\{file.Name}"); 
    } 
} 

文件是一種FileInfo類的。它已經有一個名爲MoveTo()的方法,它接受一個目標路徑。

相關問題