2012-01-27 6 views
1

私は、ファイルの作成日にいくつかの基本的なユニットテストを実行していると私は奇妙な場合にrunnedに応じて変化している:のCreationDateは(少なくとも私には)コンテキスト

[TestInitialize] 
    public void Initialize() 
    { 
     if (File.Exists(UncFile)) 
      File.Delete(UncFile); 
     if (File.Exists(LocalFile)) 
      File.Delete(LocalFile); 
    } 

    [TestMethod] 
    public void ProxyFile_DeleteOlderFileOnLocalSystem() 
    { 
     using (StreamWriter sw = File.CreateText(LocalFile)) { } 
     Thread.Sleep(50); 

     using (StreamWriter sw = File.CreateText(UncFile)) { } 
     Thread.Sleep(50); 

     DateTime UncDate = File.GetCreationTime(UncFile); 
     DateTime OldLocalDate = File.GetCreationTime(LocalFile); 

     Assert.IsTrue(UncDate > OldLocalDate); 
    } 

作品罰金を!一方:

[TestInitialize] 
    public void Initialize() 
    { 
     using (StreamWriter sw = File.CreateText(UncFile)) { } 

     if (File.Exists(UncFile)) 
      File.Delete(UncFile); 
     if (File.Exists(LocalFile)) 
      File.Delete(LocalFile); 
    } 


    [TestMethod] 
    public void ProxyFile_DeleteOlderFileOnLocalSystem() 
    { 
     using (StreamWriter sw = File.CreateText(LocalFile)) { } 
     Thread.Sleep(50); 

     using (StreamWriter sw = File.CreateText(UncFile)) { } 
     Thread.Sleep(50); 

     DateTime UncDate = File.GetCreationTime(UncFile); 
     DateTime OldLocalDate = File.GetCreationTime(LocalFile); 

     Assert.IsTrue(UncDate > OldLocalDate); 
    } 

は私に2つのビーイングの間に偽...唯一の違いgaves:

using (StreamWriter sw = File.CreateText(UncFile)) { } 

をしかし、私はちょうど後にこのファイルを削除します。

if (File.Exists(UncFile)) 
       File.Delete(UncFile); 

は、誰かが私を指摘でした私は何を正しくしていないのですか?

thx。

[EDIT]

第二の例では、日付は、UNCが作成した最初のファイルと同様のようです:

Debug.Print("UncFile : " + File.GetCreationTime(UncFile).Ticks); 
-> 
UncFile (Init) : 634632802355468953 
UncFile (Test) : 634632802355468953 
LocalFile (Test) : 634632802355618962 

+0

それはのように思えますUncFile、おそらくUncFileはInitialize()で削除されていませんか? –

+0

テストをステップバイステップでデバッグしてみてください。これを実行している間にファイルを見てください。何が起きているのか分かりません。 – dillenmeister

+3

[Windowsファイルシステムの複製:whileが削除され、再度作成されたときにファイルの作成時間が変わらない](http://stackoverflow.com/questions/8804342/windows-filesystem-creation-time-of-a-ファイルが変更されたときに削除されます) –

答えて

1

OKがそれを見つけた[/ EDIT]:

File.GetCreationTime Method

メモこのメソッドは、 ネイティブ関数を使用しており、その値は オペレーティングシステムによって継続的に更新されない可能性があるため、不正確な値が返されることがあります。

レイモンド・リンクのStackOverflowの中に別の答えにのおかげで、ここでは解決策がある:最初UncFileの作成時間が第二の作成時間と同じである場合

using (StreamWriter sw = File.CreateText(LocalFile)) { } 
      File.SetCreationTime(LocalFile,DateTime.Now); 
      Thread.Sleep(50); 

      using (StreamWriter sw = File.CreateText(UncFile)) { } 
      File.SetCreationTime(UncFile, DateTime.Now); 
      Thread.Sleep(50); 

      DateTime UncDate = File.GetCreationTime(UncFile); 
      DateTime OldLocalDate = File.GetCreationTime(LocalFile); 

      Assert.IsTrue(UncDate > OldLocalDate); 
+0

ええ、私はこれらの行に沿って何かを言うつもりだった。ファイルを削除して同じ名前の新しいファイルを作成した場合、それは私が信じていた古いものからの属性の一部を保持します。私はそれが慎重な機能であるため、システムによって更新されていないという事実だけではわかりません。新しいファイルには、既存のファイルがあるかどうかを確かめるのは間違いありません。それが最終的に更新されたら... +レイモンド・チェンは既に上記のコメントでこれをカバーしたようです。そしてより良い。;-) – Chris

+0

説明とソリューションを提供してくれてありがとう。よくやった。 –

関連する問題