2

フォルダの子孫の最新の書き込み時刻を取得するにはどうすればよいですか?

指定された DateTime の後に変更されたすべてのファイルのパスを返すメソッドが必要です。ディレクトリのLastWriteTimeが指定された範囲内にあることを確認してから、そのファイルとサブディレクトリを繰り返し処理するという問題を解決することで、多くの高価なディスク読み取りを節約できると考えました。

これは、ディレクトリの最上位レベル内のファイルが変更されると、フォルダーの最終書き込み時刻も更新されるという点で機能します。ただし、最終書き込み時刻は、ファイルの直接の親よりも先にバブルアップすることはありません。つまり、孫ファイルが変更されると、そのプロパティが更新され、親フォルダーのプロパティも更新されますが、祖父は更新されません。

これを達成するために使用できる別の高レベルのインジケーターはありますか、または最後の変更時間に関係なく、すべてのフォルダーを再帰する必要がありますか?

現在の方法は次のとおりです。

private void AddAllFilesOfAllSubdirsWithFilterToList(string dirPath, ref List<FileInfo> filesList, DateTime minDate)
{
    // Return files in this directory level
    foreach (string filePath in Directory.GetFiles(dirPath, "*.*", SearchOption.TopDirectoryOnly))
    {
        FileInfo fileInfo = new FileInfo(filePath);
        if (fileInfo.LastWriteTimeUtc > minDate)
        {
            filesList.Add(fileInfo);
        }
    }

    // Return recursive searches through sudirs
    foreach (string subDirPath in Directory.GetDirectories(dirPath))
    {
        DirectoryInfo dirInfo = new DirectoryInfo(subDirPath);
        if (dirInfo.LastWriteTimeUtc > minDate)
        {
            GetAllFilesOfAllSubdirsWithFilter(subDirPath, ref filesList);
        }
    }
}
4

3 に答える 3