2014-02-17 2 views
0

플래시 디스크에서 C: 디렉토리로 복사 폴더를 시도했습니다. 때때로 바르게 실행되지만, 가끔 오류 얻을 :이 문제에 대해 어떤 생각을 가지고 있습니까런타임 오류 '경로의 일부를 찾을 수 없습니다.'E :

Could not find a part of the path E:\Debug\Vip

를? 여기 내 코드 :

string source_dir = "E:\\Debug\\Vip"; 
string destination_dir = "C:\\Vip"; 

if (!System.IO.Directory.Exists(destination_dir)) 
{ 
    System.IO.Directory.CreateDirectory(destination_dir); 
} 

// substring is to remove destination_dir absolute path (E:\). 

// Create subdirectory structure in destination  
foreach (string dir in Directory.GetDirectories(source_dir, "*", System.IO.SearchOption.AllDirectories)) 
{ 
    Directory.CreateDirectory(destination_dir + dir.Substring(source_dir.Length)); 

} 

foreach (string file_name in Directory.GetFiles(source_dir, "*.*", System.IO.SearchOption.AllDirectories)) 
{ 
    File.Copy(file_name, destination_dir + file_name.Substring(source_dir.Length), true); 
} 
+0

사용 Path.Combine http://msdn.microsoft.com/en-us/library/system .io.path.combine.aspx 디렉토리를 만들기 전에 두 개의 경로를 결합하십시오. –

답변

0

Path.Combine을 사용하여 경로를 결합하십시오.

예컨대

Directory.CreateDirectory(System.IO.Path.Combine(destination_dir,dir.Substring(source_dir.Length))); 
2

Path.Combine 방법을 사용하면 디렉토리를 만들기 전에 두 경로를 결합 할 수 있습니다.

string source_dir = "E:\\Debug\\Vip"; 
string destination_dir = "C:\\Vip"; 

if (!System.IO.Directory.Exists(destination_dir)) 
{ 
    System.IO.Directory.CreateDirectory(destination_dir); 
} 

// substring is to remove destination_dir absolute path (E:\). 

// Create subdirectory structure in destination  
foreach (string dir in Directory.GetDirectories(source_dir, "*", System.IO.SearchOption.AllDirectories)) 
{ 
    Directory.CreateDirectory(Path.Combine(destination_dir,dir.Substring(source_dir.Length)); 

} 

foreach (string file_name in Directory.GetFiles(source_dir, "*.*", System.IO.SearchOption.AllDirectories)) 
{ 
    File.Copy(file_name, Path.Combine(destination_dir, file_name.Substring(source_dir.Length), true)); 
} 

내가의 DestinationPath하는 SourcePath를에서 모든 폴더와 파일을 복사하는 방법에 따라 사용하는 것을 선호

private static void CopyAll(string SourcePath, string DestinationPath) 
{ 
    string[] directories = System.IO.Directory.GetDirectories(SourcePath, "*.*", SearchOption.AllDirectories); 

    Parallel.ForEach(directories, dirPath => 
    { 
     Directory.CreateDirectory(dirPath.Replace(SourcePath, DestinationPath)); 
    }); 

    string[] files = System.IO.Directory.GetFiles(SourcePath, "*.*", SearchOption.AllDirectories); 

    Parallel.ForEach(files, newPath => 
    { 
     File.Copy(newPath, newPath.Replace(SourcePath, DestinationPath)); 
    }); 
} 
관련 문제