我有一组 3 个级别的子文件夹,其中包含超过 20k 个文件c:\MyData
。
我的 E 驱动器上有一组几乎相同的子文件夹e:\projects\massdata
我想签入 C 和 E 中已经存在的任何内容(相同的文件夹名称、相同的文件名、相同的大小),我想从 C 中删除。
遍历此文件夹结构的最佳方法是什么?
我有一组 3 个级别的子文件夹,其中包含超过 20k 个文件c:\MyData
。
我的 E 驱动器上有一组几乎相同的子文件夹e:\projects\massdata
我想签入 C 和 E 中已经存在的任何内容(相同的文件夹名称、相同的文件名、相同的大小),我想从 C 中删除。
遍历此文件夹结构的最佳方法是什么?
如何使用连接运算符。像这样加入文件名
public void cleanUp()
{
var cFiles = Directory.GetFiles(@"c:\MyData","*.*",SearchOption.AllDirectories);
var fFiles = Directory.GetFiles(@"e:\projects\massdata","*.*",SearchOption.AllDirectories);
Func<string, string, Tuple<string, long>> keySelector = (path, root) =>
new Tuple<string, long>(path.Replace(root, ""), new FileInfo(path).Length);
foreach (var file in cFiles.Join(fFiles, f => keySelector(f,@"e:\projects\massdata"), c => keySelector(c,@"c:\MyData"), (c, f) => c))
{
File.Delete(file);
}
}
更新后的第二次编辑:键选择器现在应该满足您的要求。如果我误解了他们。这肯定很容易,所以看看你需要改变什么。如果不发表评论:)
递归遍历每个目录中的所有文件。
在hashMap中创建一个描述 E 中文件的相对路径、文件大小等的字符串。然后在通过 C 时检查是否存在特定文件的相对路径,如果存在则将其删除。
例如,该字符串可以是 [FILENAME]##[FILESIZE]##[LASTEDITER]。
这是在 C# 中递归搜索的一种方法:http: //support.microsoft.com/kb/303974