1

Je travaille sur la surveillance du répertoire de fichiers dans laquelle je dois rechercher un répertoire spécifique "D: \ Watch" et s'il y a un nouveau fichier détecté, je dois le traiter et afficher le contenu. J'utilisais FileSystemWatcher mais mon exigence est de vérifier le répertoire toutes les 1 minutes. C'est pourquoi je passe le FileSystemWatcher et crée un service Windows qui est programmé toutes les 1 minute et lit le répertoire pour traiter les nouveaux fichiers.Traitement parallèle du répertoire

Mais mon exigence est de lire les fichiers dans Parallel et d'afficher le contenu après le traitement du fichier sans avoir à attendre que d'autres fichiers soient traités. J'ai également besoin de gérer l'exception si l'un des fichiers n'a pas de contenu approprié.

Comment je peux accomplir cette tâche avec les exigences ci-dessus en parallèle. J'utilise C# .net. Merci

Répondre

0

Si je vous ai bien compris, ce code devrait fonctionner pour vous.

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

Voici votre logique de traitement

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

Merci compagnon. Cela fonctionnera-t-il s'il y a une exception pendant le traitement du fichier et comment je vais gérer l'exception dans la programmation parallèle? – ehafeez

+0

Il peut y avoir des situations où vous avez des exceptions lors du traitement d'un fichier. (Ex: le fichier est verrouillé). Vous devez donc les manipuler dans la méthode 'ProcessFile'. Une autre possibilité est que vous avez tellement de fichiers dans le répertoire et si vous essayez de tous les traiter dans plusieurs threads, vous aurez des problèmes d'utilisation de mémoire/processeur. Il est logique de déplacer le fichier vers un autre répertoire dès que vous commencez à le traiter. Donc un autre fil ne va pas le ramasser. –

+0

Si vous attendez des milliers de fichiers dans ce répertoire, il est logique de partitionner votre collection de fichiers en 10 fichiers chacun et de traiter la partition par partition. Vous n'aurez donc que 10 threads à la fois au lieu de 1000 threads. –