2013-10-31 9 views
16

Ich versuche alle Dateien, die mit _DONE enden, in einen anderen Ordner zu verschieben.Dateien von einem Ordner in einen anderen verschieben C#

versuchte ich

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

Aber auf diese Codes i eine Fehlermeldung, erhalten ausführt.

The given path's format is not supported. 

Wo bin ich falsch gelaufen?

+0

Ich bin mir nicht sicher, ob die Dateiübertragung im Fenster '_' unterstützt. – Rohit

Antwort

15

Ihre Schrägstriche verlaufen in die falsche Richtung. Unter Windows sollten Sie Schrägstriche verwenden. Z.B.

+0

Meinst du," Unter Windows solltest du keine Schrägstriche verwenden "? – Skylark

+0

tat ich. Danke, dass Sie meine Grammatik vor 4 Jahren korrigiert haben. Ich bin sicher, dass diese zusätzliche Erläuterung für andere nützlich sein wird. – codemonkeh

+0

Etwas komisch mit so viel Verkehr es wurde vorher nicht bemerkt. – Skylark

6

Das Array der von System.IO.Directory.GetFiles() zurückgegebenen Dateinamen enthält den vollständigen Pfad. (Siehe http://msdn.microsoft.com/en-us/library/07wt70x2.aspx) Dies bedeutet, dass das Anhängen der Quell- und Zielverzeichnisse an den Wert file nicht dem entspricht, was Sie erwarten. Am Ende erhalten Sie Werte wie F:\model_RCCMREC\F:\model_RCCMREC\something_DONE.wav in fileToMove. Wenn Sie einen Haltepunkt für die Zeile File.Move() festlegen, können Sie sich die Werte ansehen, die Sie übergeben. Dadurch können Sie eine Situation wie diese beheben.

Kurz gesagt, müssen Sie den relativen Pfad von rootFolderPath zu jeder Datei bestimmen, um den richtigen Zielpfad zu bestimmen. Werfen Sie einen Blick auf die System.IO.Path Klasse (http://msdn.microsoft.com/en-us/library/system.io.path.aspx) für Methoden, die helfen werden. (Insbesondere sollten Sie Path.Combine() anstelle von + zum Erstellen von Pfaden in Betracht ziehen.)

+0

danke, Fertig;) –

+0

das ist die richtige Antwort. – richardwhatever

0

Bitte versuchen Sie die folgende Funktion. Das funktioniert gut.

Funktion:

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

ich es so gemacht:

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

Datei ist eine Art von Fileinfo-Klasse. Es hat bereits eine Methode namens MoveTo(), die einen Zielpfad verwendet.