我尝试将文件夹从闪存盘复制到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);
}
答案 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)));