2014-02-17 74 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)); 
} 

我喜欢用下面的方法来所有文件夹和文件复制从SOURCEPATH到的DestinationPath

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)); 
    }); 
} 
相关问题