IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

[C#] Modification de la date de dernier accès après copie


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Parmifer
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2014
    Messages : 39
    Par défaut [C#] Modification de la date de dernier accès après copie
    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);
                }   
            }

  2. #2
    Membre expérimenté
    Homme Profil pro
    Analyste Programmeur
    Inscrit en
    Septembre 2008
    Messages
    176
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Analyste Programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 176
    Par défaut
    Bonjour,

    A tu essayé la méthode MoveTo() plutôt que CopyTo() ?
    Il me semble qu'elle ne change pas la date du dernier accès (a confirmer).

    Bonne continuation

  3. #3
    Membre Expert
    Avatar de PixelJuice
    Homme Profil pro
    Ingénieur .NET & Game Designer
    Inscrit en
    Janvier 2014
    Messages
    661
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur .NET & Game Designer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2014
    Messages : 661
    Par défaut
    Salut,

    j'ai fait ce petit test et les deux fichiers prennent exactement les mêmes infos , donc je ne sais pas trop d’où viens ton erreur (j'utilise File.Copy() ):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
            private void Copier(string fichierA, string fichierB)
            {       
                File.Copy(fichierA, fichierB);
                FileInfo fileA = new FileInfo(fichierA);
                FileInfo fileB = new FileInfo(fichierB);
     
                fileB.CreationTime = fileA.CreationTime;
                fileB.LastAccessTime = fileA.LastAccessTime;
                fileB.LastWriteTime = fileA.LastWriteTime;
            }
    Essaye avec ça , et dit moi si ça marche chez toi , chez moi ça fonctionne nickel.

  4. #4
    Membre confirmé Avatar de Parmifer
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2014
    Messages : 39
    Par défaut
    Merci pour vos réponses.

    Kyroon > Pour des problèmes de droits, on est obligé de faire une copie et non pas un MoveTo() (de cette façon, les droits appliqués sur les fichiers sont ceux du dossier parent de I, et non pas ceux de l'ancien).

    PixelJuice > Ca ne marche pas non plus, j'ai le même souci : la date de création est bien mise à jour mais pas la date de dernier accès

    Veux tu plus de précision, quelle qu'elle soit?

    Edit : En lançant un autre programme de bac à sable, j'arrive à retirer 3 ans sur la date de dernier accès, mais que sur certains de mes fichiers, pas tous.
    C'est vraiment étrange, parce qu'autant quand je fais au pas à pas des fois ça marche impec' autant des fois ça marche pas du tout.
    Ca fait 24h qu'on se casse la tête dessus et on n'avance pas.

    De plus, le serveur sur lequel je fais mes tests est configuré de façon à ce que j'ai tous les droits donc à priori ça ne viens pas de là...

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2014
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2014
    Messages : 86
    Par défaut
    Bonjour essaye ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public void MyCopy(string copyFromPath, string copyToPath)
        {
            var origin = new FileInfo(copyFromPath);
     
            origin.CopyTo(copyToPath, true);
     
            var dest = new FileInfo(copyToPath);
            dest.CreationTime = origin.CreationTime;
            dest.LastWriteTime = origin.LastWriteTime;
            dest.LastAccessTime = origin.LastAccessTime;
        }

  6. #6
    Membre confirmé Avatar de Parmifer
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2014
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2014
    Messages : 39
    Par défaut
    Hum... Ca ne marche pas non plus. Je rencontre le même souci.

    Pour donner un exemple chiffré, ça n'a marché que pour 2 fichiers sur 362...

    (J'utilise vos fonctions dans une boucle)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Date du dernier acces à mon formulaire
    Par yatmen dans le forum IHM
    Réponses: 4
    Dernier message: 25/02/2009, 16h08
  2. Date du dernier accès à un objet
    Par ilalaina dans le forum Administration
    Réponses: 1
    Dernier message: 03/09/2008, 09h03
  3. Réponses: 2
    Dernier message: 14/12/2006, 09h35
  4. Réponses: 2
    Dernier message: 29/11/2006, 11h19
  5. [Upload] Date de dernier accès aux fichiers...
    Par John@EuroDevz dans le forum Langage
    Réponses: 10
    Dernier message: 08/04/2005, 10h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo