Domanda

Voglio sapere quando viene creato un nuovo file su una directory specifica, invece di scansionare la directory di tanto in tanto.

Comprendo che esiste un modo per far dire al mio sistema operativo che è stato creato un nuovo file. Come funziona?

Come notato, questo ha somiglianze con Come ricevere una notifica sul file / cambio di directory in C / C ++, idealmente usando POSIX

È stato utile?

Soluzione

Dipende da quale sistema operativo.

Su Windows, l'API di base sarebbe Modifica directory notifiche .

Dato che citi Linux nei tag, questa sarebbe la inotify API .

Per aggiungere alla risposta OS X, a partire dalla 10.5, si desidera FSEvents API .

Altri suggerimenti

Sotto Linux, controlla Inotify .

FAM fornisce un'interfaccia coerente per la visione dei file in tutti gli UNIX. Su Linux, il demone back-end può essere sostituito da Gamin , ma un programma collegato con FAM funzionerà bene con Gamin. (Dietro le quinte, FAM potrebbe usare il polling e Gamin potrebbe usare inotify o dnotify o kqueue, ma non dovresti preoccuparti dell'implementazione.)

OS X.5 ha FSEvents , che è molto diverso in quanto controlla l'intero sistema invece di file e directory specificati, ma soddisfa anche le tue esigenze.

Su Windows, vedi Trova (First | Next | Close) ChangeNotification o ReadDirectoryChanges .

FileSystemWatcher è la risposta - e funziona in modo ricorsivo.

C'è un esempio qui (cerca FileSystemWatcher)

Con Mac OS X, questa funzionalità fa parte dell'API Spotlight.

Usando .Net su Windows (non sono sicuro di Linux / mono) puoi usare un FileSsytemWatcher per cercare nuovi file e generare eventi quando vengono creati.

Da MSDN:

  

Usa FileSystemWatcher per cercare   modifiche in una directory specificata. tu   può guardare per cambiamenti nei file e   sottodirectory del specificato   directory. È possibile creare un componente   per guardare i file su un computer locale, a   unità di rete o un computer remoto.

Pagina MSDN

L'API di Windows fornisce funzionalità per il monitoraggio del file system: qui c'è un esempio http://msdn.microsoft.com/en-us/library/aa365261%28VS.85%29.aspx

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top