1

Я работаю над мониторингом файлового каталога, в котором я должен искать конкретный каталог «D: \ Watch», и если есть какие-либо новые обнаружения файлов, я должен обработать его и показать содержимое. Я использовал FileSystemWatcher, но мое требование - проверять каталог на каждые 1 минуту. Вот почему я пропускаю FileSystemWatcher и делаю службу Windows, которая назначается через каждые 1 минуту и ​​читает каталог для обработки новых файлов.Параллельная обработка каталога

Но мое требование состоит в том, чтобы читать файлы в Parallel и показывать содержимое после обработки файла и не нужно ждать, пока другие файлы будут обработаны. Мне также нужно обработать исключение, если какой-либо из файлов не имеет надлежащего содержимого.

Как я могу достичь этой задачи с помощью вышеуказанных требований параллельно. Я использую C# .net. Спасибо

ответ

0

Если я правильно понял вас, этот код должен работать на вас.

var filePaths = Directory.EnumerateFiles(@"c:\mydir"); 
    Parallel.ForEach(filePaths, ProcessFile); 

Вот ваша логика обработки

private void ProcessFile(string filePath) 
    { 
     //do what you have to do here. Proper exception handling is needed in this method  
    } 
+0

Спасибо дружище. Будет ли он работать, если есть какие-либо исключения во время обработки файлов и как я буду обрабатывать исключение в параллельном программировании? – ehafeez

+0

Могут быть ситуации, когда у вас есть исключения во время обработки файла. (Пример: файл заблокирован). Поэтому вам нужно обработать их в методе ProcessFile. Другая возможность заключается в том, что у вас так много файлов в каталоге, и если вы попытаетесь обработать их все в нескольких потоках, у вас будут проблемы с памятью/процессором. Имеет смысл перемещать файл в другой каталог, как только вы начнете его обрабатывать. Так что другой поток не заберет его. –

+0

Если вы ожидаете 1000 файлов в этом каталоге, имеет смысл разбить коллекцию файлов на 10 файлов каждый и обработать раздел по разделам. Таким образом, вы будете иметь только 10 потоков, работающих одновременно, а не 1000 потоков. –

Смежные вопросы