子文件夹遍历

时间:2010-09-10 18:54:59

标签: c# directory subdirectory

我有一组3级以上的子文件夹,c:\MyData中有超过20k个文件。

我的E驱动器上e:\projects\massdata

上有一组几乎相同的子文件夹

我想检查C和E中已存在的任何内容(相同的文件夹名称,相同的文件名,相同的大小),我想从C中删除。

遍历此文件夹结构的最佳方式是什么?

2 个答案:

答案 0 :(得分:3)

如何使用join运算符。像这样加入文件名

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);
        }
    }

更新后的第二次编辑: 键选择器现在应该满足您的要求。如果我误解了他们。这肯定很容易,所以看看你需要改变什么。如果没有发表评论:)

答案 1 :(得分:2)

递归地浏览每个目录中的所有文件。

hashMap 中创建一个字符串,用于描述E中文件的相对路径,文件大小等。然后只检查特定文件相对路径是否存在,何时通过C,如果是则删除它。

例如,字符串可以是[FILENAME] ## [FILESIZE] ## [LASTEDITER]。

以下是在C#中递归搜索的一种方法: http://support.microsoft.com/kb/303974

相关问题