2008-10-28 9 views
11

¿Cuál es la mejor manera de supervisar una carpeta para ver cuándo se ha agregado un archivo de imagen? Los archivos se agregan aproximadamente una vez por minuto y los nombres son así ... image0001.jpg, image0002.jpg, image0003.jpg, etc. Necesito saber cuándo se ha escrito un archivo en la carpeta para que mi aplicación pueda acceder y usar eso.Supervisión de una carpeta para archivos nuevos en Windows

Respuesta

-1

inotify podría ser su cosa

+0

Inotify es solo para Linux, desafortunadamente. – JesperE

+0

Hmm. Tenía la impresión de que las bibliotecas se transportaban a diferentes plataformas. –

4

Como se mencionó anteriormente, las notificaciones de cambio de directorio es lo que desea.

Los he examinado también, y la advertencia que he visto es que las ventanas dispararán la notificación cuando el archivo se empiece a escribir en la carpeta. Si el archivo es lo suficientemente grande, recibirá la notificación antes de que el archivo haya terminado de escribirse.

Salida this google search para diversas soluciones para esperar hasta que el archivo está completamente escrito

Editar: Acabo de ver que la cuestión fue etiquetado con C++, y vinculado a una búsqueda .Net. Aunque lo que proporcioné puede no ser el idioma correcto, creo que seguirá teniendo los mismos problemas en Windows sin importar con qué sistema esté codificando.

0

Usted puede utilizar un método de sondeo para supervisar la carpeta. El ciclo se ejecutará cada 5 segundos, por ejemplo.

Este método devuelve una lista de los archivos nuevos:

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

Este es el método que va a sondear cada 5 segundos y llame al método anterior.

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