2008-10-28 12 views
11

Was ist der beste Weg zur Überwachung eines Ordners, um zu sehen, wann eine Bilddatei hinzugefügt wurde? Dateien werden ungefähr einmal pro Minute hinzugefügt und die Benennung geht so ... image0001.jpg, image0002.jpg, image0003.jpg usw. Ich muss wissen, wann eine Datei in den Ordner geschrieben wurde, damit meine App darauf zugreifen und sie verwenden kann es.Überwachen eines Ordners für neue Dateien unter Windows

Antwort

-1

inotify könnte Ihr Ding

+0

Inotify ist leider nur Linux. – JesperE

+0

Hmm. Ich hatte den Eindruck, dass die Librarys auf verschiedene Plattformen portiert wurden. –

4

Wie bereits erwähnt, ist die Verzeichnisänderung Benachrichtigungen was Sie wollen.

Ich habe auch in sie geschaut, und die Einschränkung, die ich gesehen habe, ist, dass Windows die Benachrichtigung auslöst, wenn die Datei in den Ordner geschrieben wird. Wenn die Datei groß genug ist, erhalten Sie die Benachrichtigung, bevor die Datei fertig geschrieben ist.

Check out this google search für verschiedene Lösungen zu warten, bis die Datei vollständig geschrieben

bearbeiten: Ich habe gerade gesehen, dass die Frage mit c markiert wurde ++, und ich zu einer .Net Suche verknüpft. Obwohl das, was ich bereitgestellt habe, möglicherweise nicht die richtige Sprache ist, würde ich denken, dass Sie immer noch die gleichen Probleme unter Windows haben werden, egal welches System Sie programmieren.

1

Änderungsmitteilungen können einige Gemeinkosten verursachen, wenn Sie NTFS haben, betrachten Sie NTFS change journals.

0

können Sie ein Abfrageverfahren verwenden, um die Ordner zu überwachen. Die Schleife wird beispielsweise alle 5 Sekunden ausgeführt.

Diese Methode liefert eine Liste der neuen Dateien:

List<string> files = new List<string>(); 
string path = @"C:\test\"; // whatever the path is 

public List<string> GetNewFiles(string path) 
    { 
     // store all the filenames (only .jpg files) in a list 
     List<string> currentFiles = System.IO.Directory.GetFiles(path, "*.jpg"); 

     if (currentFiles.Count() > files.Count()) 
     { 
      count = newFiles.Length - files.Length; 
      List<string> newFiles = new List<string>(); 

      foreach (string file in currentFiles) 
      { 
       if (!files.Contains(file)) 
       { 
        newFiles.Add(file); 
       } 
      } 
     } 
     files = currentFiles; 
     return newFiles; 
    } 

Dies ist die Methode, die alle 5 Sekunden und rufen Sie die vorherige Methode abfragt.

public void MonitorFolder() 
{ 
    while (true) 
    { 
     List<string> newFiles = GetNewFiles(path); 
     System.Threading.Thread.Sleep(5000); // 5000 milliseconds 
    } 
} 
Verwandte Themen