我正在使用以下方法将目录的内容复制到其他目录。在C中复制大量数据的方法
public void DirCopy(string SourcePath, string DestinationPath)
{
if (Directory.Exists(DestinationPath))
{
System.IO.DirectoryInfo downloadedMessageInfo = new DirectoryInfo(DestinationPath);
foreach (FileInfo file in downloadedMessageInfo.GetFiles())
{
file.Delete();
}
foreach (DirectoryInfo dir in downloadedMessageInfo.GetDirectories())
{
dir.Delete(true);
}
}
//=================================================================================
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), true);
});
}
我唯一的问题是源路径中有相当多的数据,并且在复制过程中程序变得无法响应。
我想知道我的选择是对的数据复制。我做了一些研究,有人推荐使用缓冲区。
我真的没有看到,我的理解特别好,这样清晰而简洁的任何帮助/资源将是巨大的任何解决方案。
感谢您的帮助!
你可以使用一个单独的线程来运行,而不是在它的UI线程中运行它。 –
你能量化一些你正在复制的东西吗?像目录,文件,传输的数据量一样,您可能会使用错误的工具进行作业 – konkked
这是一个UI应用程序吗?如果是这样,请在后台线程中执行此操作。例如通过“Task.Run” –