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.