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

Discussion :

QfileInfo : Date & Heure

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut QfileInfo : Date & Heure
    Bonjour,

    Je dois faire du contrôle de données pendant la copie, c'est à dire copier un fichier si et seulement si il n'existe pas dans le répertoire destination ou si le fichier source a le même nom qu'un fichier du repertoire destination vérifier qu sa date et son heure de dernière modification est supérieure afin de ne pas écraser la donnée bien évidemment. Rien de bien étonnant comme concept.

    Quand un fichier n'existe pas dans le repertoire destination celui ci est copié.
    Cependant quand le fichier source à le même nom qu'un fichier du repertoire destination et que sa date est supérieure, il ne le remplace pas.

    Comment sa se passe,

    Je prends le nom de fichier source et je fais une boucle pour tester son nom/date/heure avec tous les fichiers présents
    dans le repertoire destination. Si c'est le cas, l'incrémente la variable EQ de 1.

    Du coup après quand je teste EQ, s'il est a 1, je lance la copie.
    Seulement cela ne marche pas.

    J'ai mis un fprintf pour récupérer les valeur de EQ et NEQ, les 2 sont à 0 0o'.
    C'est donc pas normal que les fichiers non présents dans le repertoire destination soient copiés.

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    void QtCopy(char *SrcPath, char *TarPath)
    {
     
        QString SourceDirectoryPath = QString(SrcPath); /* Convertion de la variable char en QString ( répertoire source ) */
        QString TargetDirectoryPath = QString(TarPath); /* Convertion de la variable char en QString ( répertoire cible ) */
     
        QDir::setCurrent     (SourceDirectoryPath);     /* On se place dans le repertoire source */
    	QDir  SourceDirectory(SourceDirectoryPath);
    	QDir::setCurrent     (TargetDirectoryPath);     /* On se place dans le repertoire cible */
    	QDir  TargetDirectory(TargetDirectoryPath);
     
    	QStringList SourceDirectoryFilter;                        /* On déclare un filtre sur les extentions de fichiers         */	
    	QStringList TargetDirectoryFilter;                        /* On déclare un filtre sur les extentions de fichiers         */
        SourceDirectoryFilter      << "*.*";                      /* On récupère tous les types de fichier du repertoire source  */	
        TargetDirectoryFilter      << "*.*";                      /* On récupère tous les types de fichier du repertoire cbile   */
        SourceDirectory.setNameFilters(SourceDirectoryFilter);    /* On enregistre les noms de fichiers sources dans le filtre   */
        TargetDirectory.setNameFilters(TargetDirectoryFilter);    /* On enregistre les noms de fichiers cibles dans le filtre    */
    	int SourceDirectoryFileNumbers = SourceDirectory.count(); /* On récupère le nombre de fichiers sources à copier          */
    	int TargetDirectoryFileNumbers = TargetDirectory.count(); /* On récupère le nombre de fichiers sources à copier          */
     
        int i;
     
        /* Pour tous les fichiers du répertoire source */
        for ( i=0 ; i < SourceDirectoryFileNumbers ; i++ )
    	{
     
    		QString SourceFileName = SourceDirectory.entryList(SourceDirectoryFilter).at(i); /* On récupère chaque nom de fichier contenu dans le filtre source  */
    	    QFileInfo SourceFileInfo(SourceFileName);                                        /* On récupère les infos du fichier source                                    */
            QDateTime DTSourceFileName = SourceFileInfo.lastModified();                      /* On récupère l'info concernant la dernière modification du fichier source   */
    		QTime SourceTime = DTSourceFileName.time();                                      /* On récupère l'heure de dernière modification du fichier source */
    		QDate SourceDate = DTSourceFileName.date();                                      /* On récupère la date de dernière modification du fichier source */
     
            /* On contrôle que les noms de fichiers sont pas ceux du répertoire courant ou parent */
            if (SourceFileName != "." && SourceFileName != ".." )                            /* On controle que le fichier n'est pas le repertoire parent ou le répertoire courant */
    		{
     
                /* Pour tous les fichiers cibles, on contrôle qui n'ont pas le même que le fichier source */
                int EQ =0;
                int NEQ=0;
                int j=0;
                for ( j=0 ; j < TargetDirectoryFileNumbers ; j++ )
                    {
                          QString TargetFileName = TargetDirectory.entryList(TargetDirectoryFilter).at(j); /* On récupère chaque nom de fichier contenu dans le filtre cible   */
                          QFileInfo TargetFileInfo(TargetFileName);                                        /* On récupère les infos du fichier cible                                    */
                          QDateTime DTTargetFileName = TargetFileInfo.lastModified();                      /* On récupère l'info concernant la dernière modification du fichier source   */
                          QTime TargetTime = DTTargetFileName.time(); 
    		              QDate TargetDate = DTTargetFileName.date(); 
     
                          /* Si ils ont le même nom, et que la date source est plus récente que la date/heure cible, on copie */
                          if ( (SourceFileName == TargetFileName) && ((SourceDate > TargetDate)&&(SourceTime > TargetTime)) )
                             {
                                              EQ++; 
                             }
     
                          if ( SourceFileName != TargetFileName )
                             {
                                              NEQ++;                        
                             }
     
                    }
     
                 QString AbsoluteSourcePath = SourceDirectoryPath + SourceFileName; /* On concatène le chemin du dossier source avec son nom  */
                 QString AbsoluteTargetPath = TargetDirectoryPath + SourceFileName; /*                                                        */
     
                 if (EQ == 1) 
                    {
     
                                         QFile file(AbsoluteSourcePath);                              /* On déclare le fichier de chemin SrcPath */
    			                         file.copy (AbsoluteTargetPath);                              /* On effectue la copie de ce fichier */
                    }  
     
                 if ( NEQ == TargetDirectoryFileNumbers )
                    {
                                         QFile file(AbsoluteSourcePath);                              /* On déclare le fichier de chemin SrcPath */
    			                         file.copy (AbsoluteTargetPath);                              /* On effectue la copie de ce fichier */
                    }  
            }
     
        }
     
     
    }
    Merci d'avance.

  2. #2
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ( (SourceFileName == TargetFileName) && ((SourceDate > TargetDate)&&(SourceTime > TargetTime)) )
    Regarde comment se comporte ce code avec un debugger et pourquoi tu ne passe jamais dans ce if. Enfin si c'est bien ce que j'ai compris.
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  3. #3
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut
    Faut que je regarde comment débugger sous QT, j'ai jamais fais.

    Le problème c'est que ça copie quand même alors que normalement, si ça ne rentre pas dans aucune des boucles, même le 2eme if ne devrait pas s'executer.

  4. #4
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut
    Il ne rentre déjà pas dans la boucle for avec j...
    Il trouve bien le bon nombre de fichiers, ./../les autres.
    Je pige pas c'est quoi son problème à cet âne de programme.

    Peut on transformer un QDate ou QTime en QString pour l'afficher ?

  5. #5
    Rédacteur

    Inscrit en
    Novembre 2006
    Messages
    1 272
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 272
    Par défaut
    Citation Envoyé par darkwall_37 Voir le message
    Il ne rentre déjà pas dans la boucle for avec j...
    Il trouve bien le bon nombre de fichiers, ./../les autres.
    Je pige pas c'est quoi son problème à cet âne de programme.
    S'il entre pas la boucle for c'est SourceDirectoryFileNumbers == 0, non ?
    Donc peut etre que le problème n'est pas vraiment là ou tu le penses ?
    Vous voulez participer aux Tutoriels, FAQ ou Traductions et faire partie de l'équipe Qt de Developpez.
    N'hésitez pas à me contacter par MP.

  6. #6
    Membre éclairé
    Homme Profil pro
    amateur
    Inscrit en
    Octobre 2007
    Messages
    731
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : amateur

    Informations forums :
    Inscription : Octobre 2007
    Messages : 731
    Par défaut
    bah pourtant, quand je récupère la valeur de la variable, j'ai bien la bonne valeur comme je l'ai dis dans le post précédent. Je vais regardé si avant d'arriver dans la boucle c'est toujours le cas. Mais vu que ça me copie les fichier quand même c'est que ça doit être bon.

    EDIT, j'ai du faire une mauvaise manip => j est bien remplit, je retrouve le bon nombre !

    Il veut jouer avec moi le petit et j'ai envi de jeter le PC par la fenêtre

    EDIT

    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
    28
    29
    30
    31
    32
    33
    34
    35
    36
    FILE* STREAM=fopen("resultats.txt","w");
     
                 /* Pour tous les fichiers cibles, on contrôle qui n'ont pas le même que le fichier source */
                int EQ =0;
                int NEQ=0;
                int j=0;
                for ( j=0 ; j < TargetDirectoryFileNumbers ; j++ )
                    {
     
                          QString TargetFileName = TargetDirectory.entryList(TargetDirectoryFilter).at(j); /* On récupère chaque nom de fichier contenu dans le filtre cible   */
                          QFileInfo TargetFileInfo(TargetFileName);                                        /* On récupère les infos du fichier cible                                    */
                          QDateTime DTTargetFileName = TargetFileInfo.lastModified();                      /* On récupère l'info concernant la dernière modification du fichier source   */
                          QTime TargetTime = DTTargetFileName.time(); 
    		              QDate TargetDate = DTTargetFileName.date(); 
     
                          if (TargetFileName != "." && TargetFileName != ".." )
                             {
     
     
     
     
                                             /* Si ils ont le même nom, et que la date source est plus récente que la date/heure cible, on copie */
                                             if ( (SourceFileName == TargetFileName) && ((SourceDate > TargetDate)&&(SourceTime > TargetTime)) )
                                                {
                                                     EQ++; 
                                                }
     
                                             if ( SourceFileName != TargetFileName )
                                                {
                                                    NEQ++;                        
                                                }
                             }
                            fprintf( STREAM, "\nEQ : %d | NEQ : %d", EQ, NEQ);  
     
                    }
                    fclose(STREAM);
    =>

    Voilà ce que me sort le petit en ayant mis ça ( j'ai aussi rajouter le contrôle sur . et .. pour la boucle j parce que je ne l'avais pas mis )


    EQ : 0 | NEQ : 0
    EQ : 0 | NEQ : 0
    EQ : 0 | NEQ : 1
    EQ : 0 | NEQ : 2
    EQ : 0 | NEQ : 2

    En sachant que j'ai bien 3 fichiers. Ce sont les même dans source et dest =>, je ne devrais pas avoir ces valeurs dans NEQ !?

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

Discussions similaires

  1. probleme date et heure avec mysql.
    Par argon dans le forum Langage SQL
    Réponses: 1
    Dernier message: 11/07/2005, 22h42
  2. Pb Calcul de dates ET heure
    Par priest69 dans le forum Access
    Réponses: 4
    Dernier message: 13/06/2005, 12h33
  3. récupérer la date et heure système
    Par Rnx69 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 01/06/2005, 15h43
  4. [date et heure] convertion d'une date en chaîne
    Par jean-jacques varvenne dans le forum SQL
    Réponses: 5
    Dernier message: 23/03/2005, 11h31
  5. Manipulations de dates et heures
    Par benj63 dans le forum C++
    Réponses: 5
    Dernier message: 16/12/2004, 15h09

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