ho bisogno di ottenere quando un file è stato creato - Ho provato con:File data di creazione in C#
FileInfo fi = new FileInfo(FilePath);
var creationTime = fi.CreationTimeUtc;
e
var creationTime = File.GetCreationTimeUtc(FilePath);
Entrambi i metodi generalmente tornare l'ora di creazione sbagliato - Credo che è stato memorizzato nella cache da qualche parte.
Il file viene eliminato e ricreato con lo stesso nome e ho bisogno di sapere quando/se è stato ricreato (controllando se la data/ora è stata modificata) - Avevo programmato di farlo vedendolo il tempo di creazione del file era cambiato ma ho trovato che questo fosse impreciso.
Sto lavorando su Win 7 e se controllo File Explorer mostra correttamente il nuovo orario di creazione del file.
Ho anche provato a utilizzare FileSystemWatcher ma non funziona completamente per il mio caso d'uso. Per esempio. se il mio programma non è in esecuzione, FileSystemWatcher non è in esecuzione, quindi quando il mio programma si riavvia non so se il file è stato cancellato e ricreato o meno.
Ho visto MSDN http://msdn.microsoft.com/en-us/library/system.io.file.getcreationtime.aspx in cui si dice:
Questo metodo può restituire un valore inesatto, in quanto utilizza le funzioni native i cui valori non possono essere continuamente aggiornato dal sistema operativo.
Ma ho anche provato a utilizzare il loro suggerimento alternativo e impostare SetCreationDate dopo aver creato un nuovo file, ma ho trovato anche che questo non funziona. Vedi prova di seguito:
[Test]
public void FileDateTimeCreatedTest()
{
var binPath = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
var fullFilePath = Path.Combine(binPath, "Resources", "FileCreatedDatetimeTest.txt");
var fullFilePathUri = new Uri(fullFilePath);
var dateFormatted = "2013-08-17T15:31:29.0000000Z"; // this is a UTC string
DateTime expectedResult = DateTime.MinValue;
if (DateTime.TryParseExact(dateFormatted, "o", CultureInfo.InvariantCulture,
DateTimeStyles.AssumeUniversal, out expectedResult)) // we expect the saved datetime to be in UTC.
{
}
File.Create(fullFilePathUri.LocalPath);
Thread.Sleep(1000); // give the file creation a chance to release any lock
File.SetCreationTimeUtc(fullFilePathUri.LocalPath, expectedResult); // physically check what time this puts on the file. It should get the local time 16:31:29 local
Thread.Sleep(2000);
var actualUtcTimeFromFile = File.GetCreationTimeUtc(fullFilePathUri.LocalPath);
Assert.AreEqual(expectedResult.ToUniversalTime(), actualUtcTimeFromFile.ToUniversalTime());
// clean up
if (File.Exists(fullFilePathUri.LocalPath))
File.Delete(fullFilePathUri.LocalPath);
}
Qualsiasi aiuto molto apprezzato.
Hai provato a utilizzare 'FileInfo.Refresh'? –
Questo ha fatto il trucco - grazie! – Will