C# 如何递归获取所有非系统目录?

C# 如何递归获取所有非系统目录?,c#,.net-4.0,C#,.net 4.0,我最近禁用了NTFS卷上的8.3文件名,并注意到枚举包含大量文件的新目录所需的时间显著减少(现在只需要25%的时间)。但是,这不适用于现有文件 要改变这一点,我想创建一个exe,它将递归地遍历驱动器上不在系统文件夹中的所有文件,将它们移动到临时目录,然后将它们移回,以便强制删除它们的8.3文件名。我已经知道如何枚举目录的文件并对每个文件执行此操作,但我不太确定如何获得磁盘上所有目录的列表,而不包括任何系统目录。在DirectoryInfo对象中是否有可以查找的属性?如果没有,我可以采取什么其他方

我最近禁用了NTFS卷上的8.3文件名,并注意到枚举包含大量文件的新目录所需的时间显著减少(现在只需要25%的时间)。但是,这不适用于现有文件


要改变这一点,我想创建一个exe,它将递归地遍历驱动器上不在系统文件夹中的所有文件,将它们移动到临时目录,然后将它们移回,以便强制删除它们的8.3文件名。我已经知道如何枚举目录的文件并对每个文件执行此操作,但我不太确定如何获得磁盘上所有目录的列表,而不包括任何系统目录。在DirectoryInfo对象中是否有可以查找的属性?如果没有,我可以采取什么其他方法来实现这一点?

给你。我相信这就是你想要的。。。 有关更多信息,请参阅

public void RecursivePathWalk(string directory)
{
    string[] filePaths = Directory.GetFiles(directory);
    foreach (string filePath in filePaths)
    {
        if (IsSystem(filePath))
            continue;

        DoWork(filePath);
    }

    string[] subDirectories = Directory.GetDirectories(directory);
    foreach (string subDirectory in subDirectories)
    {
        if (IsSystem(subDirectory))
            continue;

        RecursivePathWalk(subDirectory);
    }
}

public void DoWork(string filePath)
{
    //Your logic here
}

public bool IsSystem(string path)
{
    FileAttributes attributes = File.GetAttributes(path);
    return (attributes & FileAttributes.System) != 0;
}

您是如何定义“系统目录”的?系统目录指的是对操作系统至关重要的任何目录。在C:\Windows\之外是否有我应该关心的目录?我不确定是否有任何驱动程序或位于其他位置的东西。系统文件是否标记为具有属性的系统文件?对此我不太确定,但如果可能,我更愿意跳过包含系统文件的整个目录,而不是进入它们并检查文件本身。您应该关注的不仅仅是C:\Windows目录。C:\System Volume Information、C:\Recovery和其他也可能是关键的。依赖“系统”属性不符合您的定义,因为C:\程序文件、C:\文档和设置等都有此标志。-如果您自己的系统需要一次性解决方案:只需手动排除不需要的目录(
If(dirName!=“foo”&&dirName!=“bar”&&&……
),然后继续…:)我的标准Windows 7安装上的C:\Windows文件夹没有设置系统标志。我可以确认Doug所说的。