Salut,
pour mon programme de nettoyage, j´ai un problème à cause d´une partie de code qui doit supprimer les fichiers temporaires et inutiles.
masi elle marche mal, alors pour essayer de résoudre le problème j´ai essayé de l´isoler, mais j´y arrive toujours pas.
Merci ; )
http://rafb.net/paste/results/5keYiC70.html
Désolé, mais ces deux lignes sont en trop ; )
char szUserProfil[200];
char szWindir[200];
Elle me servait tout à l´heure.
il y a un truc genial en C/C++ ca s´apelle les commentaires!
for(int Count=65;Count<=90;Count++)
c´est quoi ces magic numbers ?
char szWayDirectory[1024];
char szUserProfil[200];
char szWindir[200];
encore des magics numbers
SetCurrentDirectory ( szWayDirectory);
c´est un peu bourrin ca !
bool DeleteAllFiles(char *szWayDirectory, char *szNameFile)
cette fonction ne renvoie pas de valeur dans tout les cas.
char szDirectoryName2[2048];
strcat(szDirectoryName2,szWayDirectory);
ca, c´est sur ca va pas marcher
tu fait un strcat dans un truc pas initialiser
tu voulais faire un strcpy
d´ailleurs tu ne t´en sers pas, alors je ne sais pas pourquoi tu l´as mis...
Bon, sinon, pour toi, aussi DeleteFile ca peut renvoyer des erreurs...
DelTypeFiles("ReadMe.txt");
DelTypeFiles("Readme.txt");
DelTypeFiles("readme.txt");
apriori, windows ne gere pas la casse dans les noms de fichier, alors tout ca c´est pareil.
hr = GetDriveType(szCharDrive);
if(hr==3)
meme commentaire qu´au dessus
sur MSDN:
To examine a directory that is not a root directory, use the path to that directory, without a trailing backslash. For example, an argument of " C:\windows" returns information about the directory " C:\windows", not about a directory or file in " C:\windows". An attempt to open a search with a trailing backslash always fails.
donc ca ca veut dire qu´il faut lire c:\
et pas c: comme tu le fait la:
sprintf(szCharDrive, " %c:", Buff);
et sinon, la recursivite c´est mal. prefere l´emploi d´une liste.
Ca fait pas mal, je m´arrete la
Godrik, t´es vraiment sympa.
Mais bon, t´as des commenta
Godrik, t´es vraiment sympa :D.
Mais bon, t´as des commentaires constructifs au moins.
Les nombres 65 à 90 sont les caractères ASCII pour les lettres a à z. Et hr==3: 3 est la valeur renvoyée par la fonction GetDriveType: c´est le type Disque Dur ou Partition.
Pour les commentaires: c´est vrai.
Pour ces deux lignes:
char szUserProfil[200];
char szWindir[200];
j´avais dit que j´avias oublié de les enlever du code mais elle me servaient avant à stocker les variables WINDIR et USERPROFILE que j´utilisais pour une autre fonction que j´ai enlevée du programme-test.
Pour le barbarisme, c´est tout ce que je connais, mais si t´as un autre moyen j´suis tout ouï.
Si je transforme ca:
char szDirectoryName2[2048];
strcat(szDirectoryName2,szWayDirectory);
en ca:
szDirectoryName[2048];
strcpy(szDirectoryName2,szWayDirectory);
et que je n´utilise plus que szWayDirectory tout court?
Pour le type de reotur, si y´en a un à la fin qui est pour si la recherche foire.
Et la j´ai pas compris:
" donc ca ca veut dire qu´il faut lire c:\
et pas c: comme tu le fait la:
sprintf(szCharDrive, " %c:", Buff); "
Merci pour la casse et je vais essayer de faire des commentaires utiles ; ).
http://rafb.net/paste/results/TVNr8A31.html
pour répondre à l´une des question de godrik et pour ton information, il est " bon" de toujours utiliser la valeur 260 plus précisemment la constante MAX_PATH lorsque tu initialise des chaines qui vont contenir des chemins d´accès car c´est le maximum autorisé par windows. Donc 200 peut dans certain cas s´avéré trop court et aller au delà est du gachis de mémoire.
comment reagir a ce que ecrit la personne :
if(feu)
{
b=-10
}
C´est ds les parenthees apres le if, si le mec ecrit ca, il se passe ca, vous comprenez ?
voila j´ai fait de mon mieux :
http://rafb.net/paste/results/wrb5NU74.html
un debut de ti rpg mais ca se lance, mais la vie s´affiche a l´infinie.
bon je vais dormir, je suis crevé, allé sur cette page et aidez moi:
https://www.jeuxvideo.com/forums/3-31-8273016-258-0-1-0-0.htm#frp
A plus, ciao !
Relis-toi -_-
b=-10;
->
b-=10;
Pis ça ça veut strictement rien dire :
if("feu")
C´est comme
if(true)
if(1)
. ..
comment faire pour que quand l´utilisateurmette : feu, ca atteragit avec le programme ?
tu le met dans une chaine de caractere style:
char attaque[10];
, t´inclues la bibliothèque < string.h> et tu fais -->
if(strcmp("feu",attaque)==0)
{
/ /Code quand le joueur attaque avec le feu
}
et ainsi de suite...
Je vais esssayé tout de suite
![]()
pour dnob700:
for(int Count=65;Count<=90;Count++)
il serait mieux de mettre
for ( char Buff=´a´; Buff<=´z´; Buff++)
c´est plus comprehensible
if(hr==3)
non
if ( hr==DISQUEDUROUPARTITION)
avec un super " #define DISQUEDUROUPARTION 3" avant
en plus, tu n´as pas lu tout mon message...
si tu lis la racine du disque C tu doit passer c:\ a findfirstfile
mais si c´est le repertoire toto a la racine de c, tu dois passer c:\toto
encore une fois s tu lu
:"http://msdn.microsoft.com/library/default.asp?ur
l=/library/en-us/fileio/fs/findfirstfile.asp"
?
Sinon pour ne pas faire de recursivite, il faut utiliser une pile ou une file de chaine de caractere alloués dynamiquement.
dans deleteallfiles tu fais
strcpy(szDirectoryName,szWayDirectory);
strcat(szDirectoryName,"\\");
strcat(szDirectoryName,FindData.cFileName);
si tu as passé " c:\" ( comme tu devrais le faire au debut), il y a deja un \ ce n´est donc pas la peine de le rajouter.
encore deleteallfiles
cette fonction ne renvoye pas de valeur si tout ce passe bien. Ton compilateur ne te le dit pas ?
est il regle au plus haut niveau de warning ?
Sinon, oui, je suis toujours cassant dans mes commentaires.
Je rappele ( pas que pour toi) les regles d´une bonne programmation:
->pas de magic number
->un code commenté
->la documentation de toute les fonctions utilisé a été lu 50 fois.
->tous les codes d´erreurs des fonctions doivent etre verifié, un message d´erreur doit etre ecrit sur std::cerr le cas échéant.
Mais ca sert a rien les commentaires ?
dynoplasma:
quand tu aura un code de 15Klignes avec des pointeurs de pointeurs de pointeurs et des hash table de liste chaine, tu sera content d´avoir des commentaires...
Je reprends un prototype non commenté que j´ai vu ici:
SDL_Surface* Vram(char* fichier)
bah, la je ne comprends rien
si j´avais lu
/ * la fonction Vram charge un fichier bitmap en memoire video*/
j´aurais deja un peu plus compris, mais j´aurais prefere
/ * la fonction Vram charge un fichier bitmap en memoire video.
char* fichier est le chemin relatif ( depuis le repertoire courant) ou absolu ( mais non URL) du ficheir bitmap a charger
la fonction renvoye un pointeur vers une SDL_Surface. Cette objet devra etre libere avec la fonction SDL_FreeSurface.
En cas d´erreur cette fonction renvoie NULL*/
ca, ca aurait ete un commentaire utile
Ouais mais si tu connais cette ligne, ca ne sert a rien de mettre sa definition ! a la imite quelques petits commentaires mais pas une definition !
j´espère que j´ai assez mis de commentaires cette fois-ci . ..
J´ai pas utilisé #define DISQUEDUROUPARTITION 003 parce que sa encombre le code alors qu´il suffit de mettre un commentaire pour expliquer . ..
Mon compilo est Dev 4.9.9.1, alors je sais pas comment le régler, mais toi tu dois le savoir . ..
" 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 . ..
J´utilise la récursivité parce qu´on me l´a conseillé.
" en plus, tu n´as pas lu tout mon message... " Si, seulement il semble que toi tu ne lise pas tout mon message parce que j´ai expliqué que j´avais pas capté.
Et je vois pas l´interet de supprimer les strcat(szDirectoryName,"\\"); vu que je passe par exemple " C:" à ma fonction ClearDirecotory.
et j´ai utilisé cette fonction des tas de fois pour vider les fichiers temporaires ( en passant un chemin style " C:\Windows\Temp") et sa marchait très bien.
Or là ( http://rafb.net/paste/results/e5llVB14.html ) ca ne supprime que ce qui est à la racine du disque dur, et pas le reste...
Et du respect pour mon travail, j´ai passé deux semaines sur ces fonctions à chercher des documents sur comment faire ca, pis après à voir ce qui marchait pas. Chez moi ca représente près de 50 heures de travail et de recherche. :regardnoir:
Ca rate même en mettant:
if(hr==3)
{
strcat(szCharDrive,"\\");
ClearDirectory(szCharDrive,szNameFile);
}