Мне нужно получить, когда был создан файл - я попытался использовать:
FileInfo fi = new FileInfo(FilePath);
var creationTime = fi.CreationTimeUtc;
и
var creationTime = File.GetCreationTimeUtc(FilePath);
Оба метода обычно возвращают неправильное время создания - я думаю, что он где-то кэшируется.
Файл удаляется и воссоздается с тем же именем, и мне нужно знать, когда/если оно было заново создано (проверяя, изменилась ли дата/время создания) - я планировал сделать это, увидев это изменило время создания файла, но я обнаружил, что это неточно.
Я работаю над Win 7, и если я проверю File Explorer, он покажет новое время создания файла.
Я также пытался использовать FileSystemWatcher, но он не полностью работает для моего использования. Например. если моя программа не запущена, FileSystemWatcher не запущен, поэтому, когда моя программа снова запустится, я не знаю, был ли файл удален и воссоздан или нет.
Я видел MSDN http://msdn.microsoft.com/en-us/library/system.io.file.getcreationtime.aspx, где говорится:
Этот метод может возвращать неточное значение, поскольку он использует собственные функции, значения которых не могут постоянно обновляться операционной системой.
Но я также попытался использовать их альтернативное предложение и установить SetCreationDate после создания нового файла, но также обнаружил, что это не работает. См. Ниже:
[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);
}
Любая помощь очень ценится.