【发布时间】:2016-09-24 15:53:55
【问题描述】:
我想使用 Visual C# .NET 3.5 版将目录中的所有文件复制到目标文件夹,这很容易完成(取自 this 答案):
private static void Copy(string sourceDir, string targetDir)
{
Directory.CreateDirectory(targetDir);
foreach (var file in Directory.GetFiles(sourceDir))
File.Copy(file, Path.Combine(targetDir, Path.GetFileName(file)));
foreach (var directory in Directory.GetDirectories(sourceDir))
Copy(directory, Path.Combine(targetDir, Path.GetFileName(directory)));
}
现在,这里有一个小问题:我希望它首先对所有文件进行最小排序,所以如果源路径是可移动驱动器,一段时间后被拔掉,它仍然会复制大部分可能的数据。使用上面的算法,如果它首先获取一个包含大文件的目录,然后继续一个包含许多小文件的目录,则用户可能会在软件仍在复制大文件时将其驱动器拔出,并且什么都不会留下驱动器上除了不完整的大文件。
我的想法是进行多个循环:首先,将每个文件路径放入一个字典中,包括其大小,然后对该字典进行排序,然后将每个文件从源复制到目标(包括创建文件夹)。
恐怕这不是一个很好的解决方案,因为循环两次大致相同对我来说似乎不合适。另外,我不确定我的字典是否可以存储这么多信息,如果源文件夹有太多不同的文件和子文件夹。
有没有更好的选择?
【问题讨论】:
-
首先您需要切换到 FileInfo 类,因为这将包含有关文件大小的信息
-
你的想法不错。继续执行它。
标签: c# algorithm sorting dictionary copy