2012-01-27 1 views
1

je courais un certain test unitaire de base à la date de création de fichiers et je runned dans une affaire étrange (pour moi au moins):CreationDate d'un fichier est en train de changer en fonction du contexte

[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); 
    } 

fonctionne très bien! tandis que:

[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); 
    } 

me gaves faux ... La seule différence entre les deux étant:

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

Mais je supprimer ce fichier juste après:

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

Quelqu'un pourrait-il me signaler ce que je ne fais pas bien?

thx.

[EDIT]

la date dans le second exemple semble être comme le premier fichier UNC Créé:

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

[/ EDIT]

+0

Il semble que si le temps de création de la première UncFile est la même que la date de création du second UncFile, peut-être UncFile n'est pas supprimé dans Initialize()? –

+0

Essayez de déboguer votre test étape par étape et regardez les fichiers en faisant cela et je suis sûr que vous comprendrez ce qui se passe. – dillenmeister

+3

duplication possible de [système de fichiers Windows: l'heure de création d'un fichier ne change pas lorsque tout est supprimé et créé à nouveau] (http://stackoverflow.com/questions/8804342/windows-filesystem-creation-time-of-a- file-doesnt-change-when-while-is-deleted) –

Répondre

1

OK trouvé:

File.GetCreationTime Method

Remarque Cette méthode peut renvoyer une valeur inexacte, car elle utilise des fonctions natives dont les valeurs peuvent ne pas être mises à jour en permanence par le système d'exploitation .

Merci à lien raymond de à une autre réponse dans Stackoverflow, voici la solution:

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

Oui, j'allais dire quelque chose dans ce sens. Si vous supprimez un fichier et en créez un nouveau rapidement, il conservera certains des attributs de l'ancien, je crois (au moins). Je ne suis pas sûr si c'est juste un cas de ne pas être mis à jour par le système car c'est une fonctionnalité délibérée ... Je serais certainement intéressé de voir si vous l'avez fait avec un vieux fichier déjà existant si le nouveau fichier conserve le ancienne date de création ou si elle finit par être mise à jour ... On dirait que + Raymond Chen l'a déjà couvert dans un commentaire ci-dessus. Et mieux.;-) – Chris

+0

Merci pour l'explication et fournir une solution. Bien joué. –

Questions connexes