Bonjours à tous !

Actuellement en période de stage, je suis l'un (pour ne pas dire le seul) vrai développeur du service info dans lequel je me trouve. Dans cette optique, on m'a confié la création d'un programme qui aura pour but d'archiver des fichiers depuis un disque H vers un disque I, en fonction de leur date de dernier accès.

Au stade où j'en suis, j'arrive à récupérer tous les fichiers (des FileInfo pour être précis) que j'ai à traiter et à les stocker dans un ArrayList, à copier toute cette liste vers le bon répertoire.

Là où ça devient problématique c'est que lors de la copie, la date de dernier accès des fichiers du disque I est réinitialisée à la date de l'opération.
Or, on souhaiterai pouvoir supprimer les fichiers au bout d'un durée déterminée, tout en prenant en compte le temps passé dans H.

L'idée était donc de sauver la date de dernier accès du fichier dans H (qui elle reste intacte) et de l'affecter à la propriété FileInfo.LastAccesTime du fichier dans I.

Mais ça ne marche pas vraiment... Même en utilisant la méthode statique File.SetLastAccessTime(Strint path, DateTime lastAccesTime) d'ailleurs.

En fait, j'arrive à modifier la date de création lors de la première exécution de ma méthode bac à sable mais pas la date de dernier accès.
A la deuxième exécution, les deux dates sont modifiées, bien que, de façon totalement aléatoire, il arrive que la date de dernier accès ne soit pas modifiée.

J'en suis arrivé à trois suppositions :

1) Ca vient du fait que le fichier copié est encore en cache et donc que la date d'accès est modifiée après coup par windows.
2) Un twoll vaudou m'a lancé un sort
3) Je suis mauvais

Pouvez vous m'aider? Merci !

Voici mon code :

Fonction bac à sable
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
 
public void testerFonctionnalites()
        {            
            Console.WriteLine("\n~~~~~~~~~ Recherche (H) ~~~~~~~~~\n");
            this.rechercher();
            FileInfo monFichierTest = (FileInfo)mesFichiers[9];            
            Console.WriteLine("\n\n~~~~~~~~~ Sélection du fichier de Test ~~~~~~~~~\n");
            Console.WriteLine("Nom du fichier : {0} ", monFichierTest.FullName);
            String source = monFichierTest.FullName;
            String cible = Path.Combine(disqueArchive, monFichierTest.Name);
            Console.WriteLine("Lien du fichier source : {0}\n", source);
            Console.WriteLine("Lien du fichier cible : {0}\n", cible);            
 
            try
            {
                Console.WriteLine("\n\n~~~~~~~~~ Copie de H vers I ~~~~~~~~~\n");
                monFichierTest.CopyTo(cible);                                             
 
                Console.WriteLine("\n\n~~~~~~~~~ 1ère Modification date dernier accès I ~~~~~~~~~\n");
                changerDates(source, cible);
 
            }
            catch (IOException e)
            {
                Console.WriteLine(e.Message);
            }          
        }
Fonction changerDates
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
 
 private void changerDates(String source, String copie)
        {            
            try
            {
                FileInfo fichier1 = new FileInfo(copie);
                FileInfo fichier2 = new FileInfo(source);
 
                fichier1.Refresh();
                fichier2.Refresh();                
 
                fichier1.CreationTime = fichier2.CreationTime;
                fichier1.LastAccessTime = fichier2.LastAccessTime;
                Console.WriteLine("Nom du fichier : {0}", fichier1.FullName);
                Console.WriteLine("Date de création : {0}", fichier1.CreationTime);
                Console.WriteLine("Dernier accès : {0}", fichier1.LastAccessTime);
            }
            catch (Exception e)
            {
                Console.WriteLine(e.Message);
            }   
        }