运行时错误'无法找到路径的一部分'E:\

时间:2014-02-17 09:59:32

标签: c#

我尝试将文件夹从闪存盘复制到C:目录。有时它运行正常,但有时我会收到错误:

  

找不到路径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);
} 

2 个答案:

答案 0 :(得分: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));
  }); 
}

答案 1 :(得分:0)

使用Path.Combine加入路径。

e.g。

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