2008-10-28 17 views
11

Jaki jest najlepszy sposób monitorowania folderu, aby zobaczyć, kiedy plik obrazu został do niego dodany? Pliki są dodawane mniej więcej raz na minutę, a nazwa wygląda tak ... image0001.jpg, image0002.jpg, image0003.jpg itd. Muszę wiedzieć, kiedy plik został zapisany w folderze, aby moja aplikacja mogła uzyskać dostęp do to.Monitorowanie folderu pod kątem nowych plików w systemie Windows

Odpowiedz

-1

inotify może być twoja sprawa

+0

Inotify ma tylko Linux, niestety. – JesperE

+0

Hmm. Miałem wrażenie, że biblioteki zostały przeniesione na różne platformy. –

4

Jak wcześniej wspomniano, powiadomienia o zmianie katalogu są tym, czego potrzebujesz.

Zajrzałem także do nich, a zastrzeżenie, które widziałem, to to, że okna będą uruchamiały powiadomienie, gdy plik zacznie być zapisywany w folderze. Jeśli plik jest wystarczająco duży, otrzymasz powiadomienie, zanim plik zostanie zapisany.

Wyjazd this google search różnych rozwiązań czeka, aż plik zostanie całkowicie napisany

Edit: Właśnie zobaczyłem, że pytanie zostało oznaczone tagiem C++, i związana z wyszukiwaniem .Net. Chociaż to, co podałem, może nie być właściwym językiem, myślę, że nadal będziesz mieć te same problemy w systemie Windows, niezależnie od tego, z którym systemem kodujesz.

0

Można użyć metody odpytywania, aby monitorować folder. Pętla będzie wykonywana co 5 sekund, na przykład.

Metoda ta zwraca listę nowych plików:

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; 
    } 

Jest to metoda, która będzie odpytywać co 5 sekund i wywołać poprzednią metodę.

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