2012-04-03 24 views
6

He escrito una herramienta para recopilar archivos de registro dentro de una ventana de tiempo especificada por el usuario de la herramienta. Hasta ahora, estaba basando la colección de archivos de registro utilizando el método File.GetLastWriteTime en los archivos de registro, comparándolo con los tiempos que el usuario ingresó y recopiló en función del resultado de estas comparaciones. He aquí un pequeño fragmento de código:Parece que File.GetLastWriteTime devuelve el valor 'desactualizado'

DateTime logFileEnd = File.GetLastWriteTime(matchingActiveLogFile); 

Sin embargo, me di cuenta de mi herramienta aún no ha recoger algunos archivos de registro que pensé que debería haber hecho. Parece que el DateTime devuelto por este método no estaba actualizado (hubo un registro más reciente en el archivo que el valor de esta fecha y hora).

Cuando miré la 'Fecha de modificación' del archivo en cuestión, también estaba 'desactualizado', había un registro más reciente en el archivo que 'Fecha de modificación'.

¿Cómo puedo obtener un valor exacto de 'GetLastWriteTime' o de Date Modified?

+0

¿A qué te refieres con * DateTime devuelto por este método no está actualizado *? – V4Vendetta

+1

fecha no se actualiza después de un tiempo? Por ejemplo, cuando veas que la fecha modificada está "desactualizada" espera ~ 30s y luego verifica la fecha nuevamente. – Reniuz

+1

Lea también este artículo: http://blogs.technet.com/b/asiasupp/archive/2010/12/14/file-date-modified-property-are-not-updating-while-modifying-a-file- sin-closing-it.aspx podría ser que experimente el mismo – Reniuz

Respuesta

9

Durante mi expiriencia, lancé un par de problemas como el suyo. En sistemas WindowsVista/7 que funcionan no siempre devuelve un resultado confiable.

Después de un tiempo nos encontramos este enlace: Disabling Last Access Time in Windows Vista to improve NTFS performance

y entender que no puede ser una "clave de alta seguridad". Para resolver esta cuestión, dejamos de retransmisión en

GetLastWriteTime 

llamada, pero guardan el valor cambiado última del archivo o en su nombre, como "FileName_yyyymmdd", o dentro de ese archivo en algún campo.

Hay otra solución para GetLastAccessTime puede encontrar aquí:

.NET FileInfo.LastWriteTime & FileInfo.LastAccessTime are wrong, podrían ser útiles en su caso también.

Mi opinión general sobre esto sería: no retransmitir en ese parámetro, pero invente algo más en su arquitectura.

Buena suerte

+3

Tuve dolor de cabeza con la fecha de creación del archivo. si crea un archivo, elimínelo y vuelva a crearlo (con el mismo nombre), la fecha de creación será del archivo creado anteriormente. Después de un tiempo encontré que el sistema operativo restaura la fecha de la memoria caché si el archivo se recrea durante 15 segundos. La solución fue cambiar el nombre del archivo cada vez, como usted mencionó. – Reniuz

+1

@Reniuz: suena familiar :) De hecho, como teníamos muchos clientes en países/culturas completamente diferentes, desde Windows XP -> Windows 7 de 64 bits, la información no confiable como esa era absolutamente inaceptable. – Tigran

1

Tigran es correcto:

Usted puede tratar de comparar los cambios de tamaño de archivo, además de escribir última vez. Es lo que hago (con FileSystemWatcher, pero es similar a comparar campos dentro de una ventana de tiempo).

+0

¡Gracias por eso, Eric! ¡Nunca pensé en eso antes! – DukeOfMarmalade

Cuestiones relacionadas