example - get info file c#
Monitoreo de Modificación de Directorio (4)
Creo que lo que quieres lo proporciona la clase FileSystemWatcher .
Este tutorial describe cómo usarlo para supervisar un directorio en busca de cambios en un servicio de Windows simple; Cómo implementar un servicio simple de Windows de FileWatcher en C #
Estoy construyendo una aplicación C # que supervisará un directorio específico para cambios y adiciones y almacenará la información en una base de datos.
Me gustaría evitar verificar cada archivo individual para las modificaciones, pero no estoy seguro si puedo confiar completamente en el tiempo de acceso al archivo.
¿Cuál sería el mejor método para usar para obtener archivos recientemente modificados en un directorio?
Verificará las modificaciones solo cuando el usuario lo solicite, no será un servicio en funcionamiento constante.
Use el objeto FileSystemWatcher. Aquí hay un código para hacer lo que estás buscando.
// Declares the FileSystemWatcher object FileSystemWatcher watcher = new FileSystemWatcher(); // We have to specify the path which has to monitor watcher.Path = @"//somefilepath"; // This property specifies which are the events to be monitored watcher.NotifyFilter = NotifyFilters.LastAccess | NotifyFilters.LastWrite | NotifyFilters.FileName | notifyFilters.DirectoryName; watcher.Filter = "*.*"; // Only watch text files. // Add event handlers for specific change events... watcher.Changed += new FileSystemEventHandler(OnChanged); watcher.Created += new FileSystemEventHandler(OnChanged); watcher.Deleted += new FileSystemEventHandler(OnChanged); watcher.Renamed += new RenamedEventHandler(OnRenamed); // Begin watching. watcher.EnableRaisingEvents = true; // Define the event handlers. private static void OnChanged(object source, FileSystemEventArgs e) { // Specify what is done when a file is changed, created, or deleted. } private static void OnRenamed(object source, RenamedEventArgs e) { // Specify what is done when a file is renamed. }
Si solo necesita verificar cuándo el usuario pregunta en lugar de todo el tiempo, no use FileSystemWatcher. Especialmente si se trata de un recurso compartido: lo último que desea es 50 máquinas cliente que miran el mismo directorio compartido.
Probablemente sea solo un error tipográfico, pero no debe mirar el tiempo de acceso al archivo, quiere ver la hora de modificación del archivo para recoger los cambios. Incluso eso no es confiable.
Lo que haría sería implementar algún tipo de función de suma de comprobación en la fecha del archivo y el tamaño del byte u otras propiedades del sistema de archivos. De esa forma no buscaría cambios en el archivo completo, solo las propiedades del mismo y puedo hacerlo a petición, en lugar de tratar de mantener una conexión con un recurso remoto para monitorearlo.
Una solución más pesada sería hacerlo al revés e instalar un servicio en la máquina que aloja la unidad compartida que podría supervisar los archivos y tomar nota de los cambios. Entonces podría consultar el servicio en lugar de tocar los archivos, pero probablemente sea excesivo.
Hmm ... pregunta interesante. Inicialmente te señalaría en la clase FileSystemWatcher . Sin embargo, si va a hacer que funcione, a solicitud del usuario, parecería que necesita almacenar inicialmente la información del directorio y luego comparar cada vez que el usuario lo solicite. Probablemente iría con un FileSystemWatcher y almacenaría tus resultados de todos modos.