1

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

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

4

1 回答 1

0

干得好。我相信这就是您所追求的...有关更多信息,请参见FileAttributes

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;
}
于 2012-10-24T15:18:43.953 回答