1

ファイルウォッチャーの問題に直面しています。私の要件は、サイズが 1 GB 以上の大きなフォルダーをコピーする場合、FSW は、フォルダー X が作成した 1 つの変更のみをログに記録する必要がありますが、X の下にあるファイルの作成イベントは記録しないことです。そして、MD5 チェックサムを計算したかったのです。 「X」フォルダでコピーされたすべてのファイル。大きなファイルのコピーには時間がかかるため、X の下のすべてのファイルとサブフォルダー名を取得することはできません。辞書データ構造に追加するすべてのファイルパスを取得する必要があります。これについてアドバイスをお願いします。

    public static string[] GetFilesAndFolders(string path)
    {
        foreach (string dirs in Directory.GetDirectories(path))
        {
            fileandFolderNames[counter] = dirs;
            counter++;
            foreach (string files in Directory.GetFiles(dirs))
            {
                fileandFolderNames[counter] = files;
                counter++;
            }
            GetFilesAndFolders(dirs);
        }
        return fileandFolderNames;
    }
4

2 に答える 2

3

大きなフォルダーのコピーは 1 回の操作ではなく、多数の個別のコピー操作で構成されるため、FileSystemWatcher はフォルダー全体のコピー操作がいつ完了したかを判断できません。したがって、各ファイルについて個別に通知されます。私の提案は、各ファイルを個別に処理することです。コピーされたら(FileSystemWatcherのイベントがトリガーされます)、MD5を計算して辞書に入れます。

于 2009-07-13T12:32:18.020 に答える
0

知っておくべきことの 1 つは、すべてのファイルとフォルダーを再帰的にコピーすると、スタック オーバーフローが発生するのを待っているということです。ディレクトリ階層を非再帰的な IEnumerable クラスにする方法については、この質問このブログ投稿を参照してください。

于 2009-07-13T12:50:20.723 に答える