J'utilise FileSystemWatcher pour notifier quand les nouveaux fichiers sont créés dans le répertoire réseau. Nous traitons les fichiers texte (environ 5 Ko de taille) et les supprimons immédiatement lorsque le nouveau fichier est créé dans le répertoire. Si le service de fenêtres FileSystemWatcher s'arrête pour une raison quelconque, nous devons rechercher les fichiers non traités après leur redémarrage. Comment puis-je gérer si le nouveau fichier vient pendant le traitement des anciens fichiers du répertoire? Des exemples s'il vous plaît?FileSystemWatcher et fichiers non traités
Merci,
Voici l'exemple de code que j'ai avec la forme simple.
public partial class Form1 : Form
{
private System.IO.FileSystemWatcher watcher;
string tempDirectory = @"C:\test\";
public Form1()
{
InitializeComponent();
CreateWatcher();
GetUnprocessedFiles();
}
private void CreateWatcher()
{
//Create a new FileSystemWatcher.
watcher = new FileSystemWatcher();
watcher.Filter = "*.txt";
watcher.NotifyFilter = NotifyFilters.FileName;
//Subscribe to the Created event.
watcher.Created += new FileSystemEventHandler(watcher_FileCreated);
watcher.Path = @"C:\test\";
watcher.EnableRaisingEvents = true;
}
void watcher_FileCreated(object sender, FileSystemEventArgs e)
{
//Parse text file.
FileInfo objFileInfo = new FileInfo(e.FullPath);
if (!objFileInfo.Exists) return;
ParseMessage(e.FullPath);
}
void ParseMessage(string filePath)
{
// Parse text file here
}
void GetUnprocessedFiles()
{
// Put all txt files into array.
string[] array1 = Directory.GetFiles(@"C:\test\");
foreach (string name in array1)
{
string path = string.Format("{0}{1}", tempDirectory, name)
ParseMessage(path);
}
}
}
Merci pour la réponse. J'y ai pensé. –
Bien que peu probable, ce n'est pas une bonne solution. Un fichier pourrait être créé entre votre dernière vérification des fichiers et l'observateur en cours d'initialisation. – johnw182