2013-10-31 4 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

슬래시가 잘못된 방향입니다. 창문에서는 백 슬래시를 사용해야합니다. 예 :

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

"윈도우에서 슬래시를 사용하면 안됩니다"라는 뜻입니까? – 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

아래 기능을 사용해보십시오. 이것은 잘 작동합니다.

는 기능 :

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

파일에서는 FileInfo 클래스의 유형 :

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

나는 이런 식으로했다. 이미 대상 경로를 취하는 MoveTo()라는 메서드가 있습니다.

관련 문제