" " tous les codes d´erreurs des fonctions doivent etre verifié, un message d´erreur doit etre ecrit sur std::cerr le cas échéant. " --> c´est un code amateur, j´fais ca pour le plaisir et si je commence à bourrer mon code de ca j´suis pas sortit de la merde, déjà que je galère "
tester les valeurs de retour est indispensable, amateur ou pas ! quand un truc va commencer a foirer, tu seras bien content de pouvoir regarder le log de tes sorties, pour cibler rapidement la partie incriminee, et debugger en finesse sans perdre 5 heures a trifouiller..
dynoplasma:
Tant que ton code est petit ca va.
mais essaye de relire un code non commenté de quelqu´un d´autre, ou un de tes codes que tu n´as pas touché depuis 6 mois. Tu vera ce que je veux dire.
tav:
forcement ca ne marche pas, puisqu´il y a un strcat dans deleteallfiles
donc, il va faire des c:\\readme.txt et ca forcement ca ne fonctionne pas.
strcpy(szDirectoryName,szWayDirectory);
strcat(szDirectoryName,"\\");
strcat(szDirectoryName,FindData.cFileName);
si dans szDirectoryName tu as c:\, tu vas efface c:\\toto.tmp
de la meme facon quand tu recurse, tu va scanner c:\\windows et ca forcement le system ne connais pas...
"si je commence à bourrer mon code de ca j´suis pas sortit de la merde, déjà que je galère . "
justement, si tu avais géré les cas d´erreurs en les affichant tu aurais plus d´information sur la source de ton erreur et donc tu passerai moins de temps a le debugger.
"chemin style " C:\Windows\Temp")"
lis msdn
"Mon compilo est Dev 4.9.9.1,..."
desole, je ne connais pas
vive le debuggueur
moi ça me fait gagner un temps monstre ![]()
et oui, le debuggeur est l´ami de l´informaticien.
tout comme google, / /, warning 4, msdn, man...
en fait, un informaticien ca a plein d´ami! ![]()
Moi quand je lance le debogueur, j´ai un joli écran bleu :demon:.
Alors j´peux pas l´utiliser.
Pour mon problème j´ai pensé qu´il fallait que je traite éspécialement" la lettre du lecteur puis que quand je trouve un dossier, je balance le tout dans ClearDirecotry ( pour l´histoire de la racine faut un \ et pour le dossier nan). Seulement sa me gonfle sérieusement parce que j´ai une erreur que je trouve pas. :grosregardnoir:. Si vous la trouviez, moi j´me suis trop énérvé dessus ( oui) ou si ovus aviez une meilleure solution...
if ( chaine[strlen(chaine)] ! = ´\\´)
strcat(chaine,´\\´);
ca me parait pas mal
j´ai reglé l´erreur ( j´susi vraimen trop c*n).
a j´ai mis des messages d´erreur pour comprdnre d´où vient le problème...
http://rafb.net/paste/results/7ehrwd96.html
Compilation:
Fonction " DelTypeFiles": erreur lors de l´ouverture de la recherche
tu as encore des fonctions qui ne retourne pas de valeur!!!!!!!!
Moi j´vois que toutes les fonctions avec ´bool´ retournent au moins un ´false´ . ..
Sérieuesement, ca marche pas ca:
http://rafb.net/paste/results/gBbnA152.html
( avec les if la chaine finit pas par \)
Et ca ne supprime toujours que aux racines
Tes fonctions renvoient bien false si elles ratent, mais rien si elles réussissent...
return true; avant } arragerait ( au moins) ce détail
ptival a raison, met des returns true a la fin de tes fonctions.
quand tu capte une erreur affiche un message, ca peut t´aider a comprendre
apres, je ne suispsa convaincu sur la politique: " quitte sur une erreur". Tu pourrais ne pas avoir les droits d´acces sur un repertoire, mais l´avoir sur les autres...
Deplus, tu appeles deux fois deleteallfiles pour chaque repertoire:
un quand tu rentre dans cleardirectory et une fois quand tu viens de le trouver ( ligne 49 et 61)
apres, http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fileio/fs/getdrivetype.asp
ne specifie pas que c´est une valeur de retour de 3 si c´est une partion. prefere l´emploi des valeurs de MSDN.
Pour lister les volumes tu as d´ailleurs une bien meilleur solution qui existe: FindFirstVolume
as tu tracé l´exécution, afficher le nom des repertoir dans lequel il rentrait.
ajouter un printf("%s\n", zWayDirectoryClear); au debut de cleardirectory pourrait t´aider a y voir plus clair.
si tu as une erreur en cours de lecture de fichier, tu ne fais pas de find close.
Pour quitter sur les erreurs, bah je peux pas faire mieux, après le code devient trop compliqué pour moi.
Pour la valeur 3: ca marche, j´ai testé!
FindFirstVolume peut arranger le problème?
Nan, donc j´touche pas à mon code, sa me complique encore les choses pour rien puisque sa résoud pas mon problème!
J´vais mettre FindClose et les trucs pour regarder où est mon erreur.
http://rafb.net/paste/results/y8lR5487.html
Ca m´affiche:
-Nouveau disque dur trouve: C:\
-Fonction " DeleteAllFiles": debut de la recherche pour C:\
-erreur, l´handle de rechrche est invalide ( =INVALID_HANDLE_VALUE).
Pourquoi? Je ne sais pas.
Pour quitter sur les erreurs, bah je peux pas faire mieux, après le code devient trop compliqué pour moi.
affiche juste un message d´erreur et continu...
Pour la valeur 3: ca marche, j´ai testé!
un test ca ne veut pas dire que " ca marche"
ca veut juste dire que chez toi sur ta machine le resultat semble conforme a tes attentes.
ca ne veut pas dire qu´iln´y a pas des cas tordu qui pourrait se presenter et que tu ne gererait pas
( en somme, l´exemple n´est pas une preuve)
FindFirstVolume peut arranger le problème?
Probablement pas, c´est juste que c´est plus propre.
en outre, en l´absence de log d´execution, je ne peux pas diagnostiquer l´erreur...
Si ca peut aider:
ce code m´affiche http://rafb.net/paste/results/NpXdvE94.html ( j´ai supprimé la fonction DeleteAllFiles au debut de ClearDirectory):
-Nouveau disque dur trouve: C:\
-Fonction " ClearDirectory": debut de la recherche pour lisermoi.txt
-Erreur l´handle de recherche est invalide pour ClearDirectory ( =INVALID_HANDLE_VALUE)
Erreur fin de l´application pour les fichiers lisezmoi.txt
-Ca passe à D:\ pour les fichiers lisezmoi.txt
If the function fails, the return value is INVALID_HANDLE_VALUE. To get extended error information, call GetLastError.
et getlasterror il dit quoi?
[in] A pointer to a null-terminated string that specifies a valid directory or path, and file name that can contain wildcard characters ( * and ? ).
tiens j´avais pas vu ca non plus.
donc je pense que a ton findfirstfile il faut passer c:\*
pourqu´il prenne tout...
Merci a vous, surtout pour le sleep.
Avec un code modifié ( je sais toujours pas si c´est ma boucle for qui durait pas assez longtemps) mais j´ai reussi a lancer mon truc ^^.
Pour les commentaires, vu que c´etait le debut, je voulais juste faire vite et passer a la partie algorithmique et non les fonctions betes et mechantes d´affichage.
J´espere que je ne vous ai pas trop ennuyé.
Merci a vous
aller, mon dernier message de la journée
J´espere que je ne vous ai pas trop ennuyé.
Si tu nous ennuyait, nous n´aurions pas répondu! ![]()
Sous devC++, j´ai fait differentes pages
( tout le mende comprend jusque la)
_ ds une page je met tout mon programme et dans l´autre rien pour l´instant.
_ le truc compile correctement
_ je coupe void affichage ( )
{
blabla
}
_ Je le colle ds la deuxieme page
_ Je compile ca marche pas
C´est la leprobleme, qui pourrais m´aider, je ne peux pas etre plus explicite !