2013-10-31 32 views
16

Çocuklar _DONE ile biten tüm dosyaları başka bir klasöre taşımaya çalışıyorum. Dosyaları bir klasörden diğerine taşıma C#

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

Ama bir hata diyerek olsun bu kodları yürütme üzerinde

çalıştı.

The given path's format is not supported. 

Nerede hata yaptım?

+0

Pencerede dosya aktarımını destekliyor mu bilmiyorum '_' – Rohit

cevap

15

Eğik çizginiz yanlış yöndedir. Pencerelerde geri eğik çizgileri kullanmalısınız. Örneğin.

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

Bunu mu demek istediniz," Pencerelerde ileri eğik çizgileri kullanmamalısınız "? – Skylark

+0

Yaptım. Dilbilgimi 4 yıl önce düzelttiğiniz için teşekkür ederiz. Bu ek açıklamanın diğerleri için yararlı olacağından eminim. – codemonkeh

+0

Çok fazla trafikte garipti, daha önce hiç not edilmedi. – Skylark

6

System.IO.Directory.GetFiles()'dan döndürülen dosya adları dizisi tam yollarını içerir. (Bkz. http://msdn.microsoft.com/en-us/library/07wt70x2.aspx) Bu, kaynak ve hedef dizinlerin file değerine eklenmesinin beklediğiniz gibi olmayacağı anlamına gelir. fileToMove'da F:\model_RCCMREC\F:\model_RCCMREC\something_DONE.wav gibi değerlerle sonuçlanacaksınız. File.Move() satırında bir kesme noktası belirlerseniz, geçirdiğiniz değerlere bakabilir ve bu durum gibi bir durumun hatalarını ayıklamaya yardımcı olabilirsiniz. Uygun hedef yolunu belirlemek için her dosyaya rootFolderPath arasındaki ilgili yolu kısaca belirtmeniz gerekir. Yardımcı olacak yöntemler için System.IO.Path sınıfına (http://msdn.microsoft.com/en-us/library/system.io.path.aspx) bir göz atın. (Özellikle, yol yolları için + yerine Path.Combine()'u düşünmelisiniz.)

+0

Teşekkür ederim;) –

+0

bu doğru cevap. – richardwhatever

0

Lütfen aşağıdaki işlevi deneyin. Bu iyi çalışıyor.

Fonksiyon:

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

dosya FileInfo sınıfının bir türüdür:

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

Ben öyle yaptı. Zaten bir hedef yolu alan MoveTo() adlı bir Yöntem var.

İlgili konular