1

最近、NTFS ボリュームで 8.3 ファイル名を無効にしたところ、非常に大量のファイルを含む新しいディレクトリを列挙するのにかかる時間が大幅に短縮されました (現在は 25% の時間しかかかりません)。ただし、これは既存のファイルには適用されません。

これを変更するには、システム フォルダーにないドライブ上のすべてのファイルを再帰的に調べ、それらを一時ディレクトリに移動し、8.3 ファイル名の削除を強制するために元に戻す exe を作成します。彼ら。ディレクトリのファイルを列挙し、それぞれに対してこのアクションを実行する方法は既に知っていますが、システムディレクトリが含まれていないディスク上のすべてのディレクトリのリストを取得する方法がよくわかりません。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 に答える