Bin c'est aussi ce que je lui ai proposé !Citation:
Envoyé par souviron34
Citation:
Envoyé par Melem
Version imprimable
Bin c'est aussi ce que je lui ai proposé !Citation:
Envoyé par souviron34
Citation:
Envoyé par Melem
Merci encore pour votre soutien. Je vais essayer vos solutions et je vous tiens au courant. Mais le bout du tunnel n'est plus très loin c'est déjà ça !
J'ai trouvé une astuce pour copier dans une variable appelée ici "tata" le nom du fichier en cours.
J'ai crée un compteur appelé "toto" qui s'incrémente à chaque passage dans la boucle do ... while. J'ai crée une condition qui s'exécute que lorsque toto vaut 2. tout ça pour éviter les "." et ".."
Le problème à l'avenir c'est que s'il m'affiche qu'un point au lieu de 2 points, je sauterai donc la copie du premier fichier ...
J'ai essayé ta solution Melem avec :
Ca ne marche pas, j'ai remplacé DIFFERENT_DE par != , ET par && , mais rien n'y fait il m'affiche toujours mes points. :cry:Code:
1
2
3
4
5 if (ent.cFileName DIFFERENT_DE "." ET ent.cFileName DIFFERENT_DE "..") { /* Faire le traitement. */ }
Ensuite beaucoup mais alors beaucoup plus embétant. Afin d'obtenir le nom du fichier en cours de listage j'ai ajouté "strcpy(nom_fichier_copie, ent.cFileName);" dans mon programme. Dans le but de recopier par la suite le nom du fichier en cours dans la varaible tata.
Tout marche niquel, tata vaut bien le dernier nom de fichier. Dès que je rajoute le le sprintf de souvrion, OU une fonction CopyFile, il m'affiche un beug au debuggage, et 3 fois sur 4 bizarement, et me dit sur cette ligne qu'il y a erreur :Code:
1
2
3
4
5
6
7
8
9
10
11
12 char nom_fichier_copie[5000][23], tata[23]; /* declaration */ if ((hEnt = FindFirstFile("F:\\donnees\\goniometrie\\courts\\*.*", &ent)) != INVALID_HANDLE_VALUE) { do { printf("%s\n", ent.cFileName); strcpy(nom_fichier_copie, ent.cFileName); strcpy(lpBuffer,ent.cFileName); p = strtok(lpBuffer, separators); i=0; /* etc etc */
avec le message suivant :Code:
1
2 strcpy(nom_fichier_copie, ent.cFileName);
passing arg1 of 'strcpy' from incompatible pointer type.
Enfin j'aimerai juste que vous m'aidiez sur ce dernier point. J'aimerais savoir s'il existe la fonction inverse de la concatenation ou alors si on peut réinitialisé la variable chemin_source_9 à sa valeur de départ juste avant la concaténation ?? Car si c'est le cas mon programme fonctionne ! Vu que j'ai enfin le dernier nom de fichier en cours et le chemin source correct. Je les concatène et ca marche, le problème c'est la boucle, d'ou l'idée de réinitialisé ou de déconcaténer :)
S'il existe un moyen, j'aimerai bien le connaitre.
Merci encore pour tout.
C'est bien la raison pour laquelle j'ai juste mis DIFFERENT_DE. Combien de fois faudra t-il te répéter qu'on compare des chaînes avec strcmp et non avec != ? Regarde dans les tutos pourquoi.Citation:
Ca ne marche pas, j'ai remplacé DIFFERENT_DE par != , ET par && , mais rien n'y fait il m'affiche toujours mes points.
nom_fichier_copie est un tableau de "tableaux de caractères", pas un tableau de caractères. nom_fichier_copie[0], nom_fichier_copie[1], etc. sont des tableaux de caractères. strcpy nécessite en premier argument l'adresse de début d'un tableau de caractères. Ce tableau doît être assez grand pour contenir la chaîne qui y sera copiée. On a déjà parlé de tout cela au moins 10 000 fois.Citation:
passing arg1 of 'strcpy' from incompatible pointer type.
Pour ça aussi on t'a déjà donné la solution. Oublie la concaténation et utilise un autre tableau pour copier tes noms de fichier. A ta place je mettrais carrémentCitation:
Enfin j'aimerai juste que vous m'aidiez sur ce dernier point. J'aimerais savoir s'il existe la fonction inverse de la concatenation ou alors si on peut réinitialisé la variable chemin_source_9 à sa valeur de départ juste avant la concaténation ??
Pour que je ne serai pas tenté de copier ou concaténer quoi que soit là-dedans.Code:#define CHEMIN_SOURCE_9 "F:\\donnees\\goniometrie\\courts\\"
C'est bon mon programme fonctionne, j'ai fait des comparaisons de chaînes avec strcmp au lieu de != (honte à moi) et forcemment ça marche. Merci melem.
J'ai déclaré un tableau de cractère et non un tableau de "tableau de cractères" et le message d'erreur strcpy a disparu.
Pour la concaténation, melem tu seras pas d'accord mais j'ai trouvé une astuce qui fonctionne mais qui sera provisoire. Au début de mon test conditonnel if , lorsqu'il y a concatenation entre le chemin_destination_9 et le nom de fichier j'ai déclaré un tableau de caractère au nombre de [54] maximum vu que le chemin ne seras jamais aussi long (quoi que d'ou le problème :) ) ce qui fait que le tableau se restreint au dernier nom de fichier + chemin d'accès de la concaténation et ç'est tout bon !
La meilleure solution serait de copier à la suite de cette chaine de caractère qui est fixe et d'une longueur 34 ! j'écrirai juste le nom de fichier à partir de chemin_destination_9 [35] et ce sera tout bon !
Ceci dit il reste encore beaucoup d'amélioration dans ce programme. Notamment la création de l'arobrescence si celle ci n'existe pas. etc etc.
Je vous tiendrai au courant de améliorations.
Merci melem et merci souviron :)
Mon programme fonctionne, cependant j'aimerai l'améliorer.
La condition pour enlever les "." et ".." du listage de dossier marche pas. j'ai tout essayé
ou encoreCode:
1
2
3
4
5
6
7
8 if ((strcmp(ent.cFileName,".")==0) && (strcmp(ent.cFileName,"..")==0)) { } else { /* traitement */ }
Rien n'y fait. Ca marche quand même mais c'était histoire de trouver l'astuce.Code:
1
2
3
4
5
6
7 if (!((strcmp(ent.cFileName,".")==0)) && (!(strcmp(ent.cFileName,"..")==0))) { /* Traitement */ }
Ah !! La réflexion booléenne....
Code:
1
2
3
4
5
6
7
8 if ((strcmp(ent.cFileName,".")==0) || (strcmp(ent.cFileName,"..")==0)) { } else { /* traitement */ }
Ah ! J'étais pas loin !!! Le OU je l'ai essayé, mais peut être pas avec le else ... Bref merci souviron !!
Ou, comme je te l'ai montré :
Code:
1
2
3
4 if ((strcmp(ent.cFileName, ".") != 0) && (strcmp(ent.cFileName, "..") != 0)) { /* traitement */ }
Si, t'étais loin. Jusqu'à quand vas-tu coder au hasard comme ça ? Je comprends que tout le monde est sujet aux erreurs, surtout lorsqu'on débute, mais ce que j'ai remarqué chez toi c'est que tu ne fais même pas l'effort de réfléchir un peu avant d'écrire. Sans compter le fait que tu ne lis même pas parfois (parfois ? non, souvent) les réponses. Essaie donc de poser des question un peu plus raisonnables la prochaine fois.