FileSystemWatcher - PullRequest
       18

FileSystemWatcher

1 голос
/ 13 июля 2009

У меня проблема с filewatcher. Мое требование заключается в том, что когда мы копируем большую папку размером один ГБ или более, FSW должен регистрировать только одно изменение, созданное этой папкой X, но не предоставлять созданные события для файлов под 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;
    }

Ответы [ 2 ]

3 голосов
/ 13 июля 2009

Поскольку копирование большой папки не является отдельной операцией, а состоит из множества отдельных операций копирования, FileSystemWatcher не может определить, когда операция копирования всей папки завершена. Таким образом, он даст вам уведомление о каждом файле в отдельности. Я предлагаю обрабатывать каждый файл отдельно. Когда он скопирован (событие FileSystemWatcher запущено), вычислите MD5 и поместите его в словарь.

0 голосов
/ 13 июля 2009

Одна вещь, которую вы должны знать, это то, что рекурсивное копирование всех файлов и папок - это переполнение стека, ожидающее, чтобы это произошло. См. этот вопрос и в этом блоге , чтобы узнать, как превратить иерархию каталогов в нерекурсивный класс IEnumerable.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...