ファイルがいつ作成されたかを取得する必要があります-次を使用してみました:
FileInfo fi = new FileInfo(FilePath);
var creationTime = fi.CreationTimeUtc;
と
var creationTime = File.GetCreationTimeUtc(FilePath);
どちらの方法も通常、間違った作成時間を返します - どこかにキャッシュされていると思います。
ファイルは削除され、同じ名前で再作成されます。いつ再作成されたかを知る必要があります (作成された日付/時刻が変更されたかどうかを確認することにより)-ファイルを確認してこれを行う予定でした作成時間は変更されましたが、これは不正確であることがわかりました。
Win 7 で作業していますが、ファイル エクスプローラーを確認すると、新しいファイルの作成時間が正しく表示されます。
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);
}
どんな助けでも大歓迎です。