yserver
Messages postés203Date d'inscriptionlundi 2 août 2004StatutMembreDernière intervention 8 septembre 2006
-
1 oct. 2004 à 19:53
yserver
Messages postés203Date d'inscriptionlundi 2 août 2004StatutMembreDernière intervention 8 septembre 2006
-
23 mai 2008 à 19:21
Bonjour et merci de lire mon poste
En faite j'ai 2 questions.
- 1 -
Est-il possible de supprimer un repertoire contenant des fichiers? Il me semble que non, il faut d'abord en supprimer tout les fichiers.
- 2 -
Pour supprimer tous les fichiers d'un repertoire, vaut-il mieux utiliser la methode :
- FindFirstFile(...) et FindNextFile(....) pour lister des fichiers, puis DeleteFile(...)
ou
- SHFileOperation avec comme parametre *.*
BruNews
Messages postés21041Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 5 nov. 2005 à 01:20
dépend ce que tu entends par "meilleur", pour la vitesse assurément NON, si tu veux que les boites de confirmation et l'animation soient visibles alors c'est fait pour cela.
heptaeon
Messages postés4Date d'inscriptionlundi 2 mai 2005StatutMembreDernière intervention 5 novembre 2005 5 nov. 2005 à 02:44
J'entend meilleur car c'est le conseil de la MSDN, et que j'estime que MS connais quant meme l'API qu'il ont programmer.
Quant tu dit pour la vitesse assurément non, tu as fait des benchs pour tester ? Ou d'où te provient ton information ?
heptaeon
Messages postés4Date d'inscriptionlundi 2 mai 2005StatutMembreDernière intervention 5 novembre 2005 5 nov. 2005 à 02:58
Au passage je vais me rendre un peu utile ^^
Pour la première question, je dit OUI :p
SHFILEOPSTRUCT FileOperation; // notre structure d'information
ZeroMemory(&FileOperation,
sizeof(FileOperation)); //On ne sais pas ce qu'on a des base ^^
FileOperation.hwnd = NULL; //Ou le HWND de ta fenetre si tu veux les réponses d'erreure en boite de dialogue
FileOperation.wFunc = FO_DELETE; // On cherchera a effacer ^^
FileOperation.pFrom = "C:\\Ton\\Repertoire\\A_Effacer"; //Le chemin de qui il te faut supprimer
FileOperation.fFlags = FOF_NOCONFIRMATION; //Je en veux pas les confirmation
if(SHFileOperation(&FileOperation))
{
//Il y a eu une erreure
}
BruNews
Messages postés21041Date d'inscriptionjeudi 23 janvier 2003StatutModérateurDernière intervention21 août 2019 5 nov. 2005 à 11:42
pFrom DOIT être terminé par un double NULL.
Je ne vois pas sur la page SHFileOperation de MSDN quoi que ce soit qui dise qu'il faut préférer cette fonction aux appels directs de l'API (la vraie de base: DeleteFile, RemoveDirectory, etc...). Ces fonctions très haut niveau du Shell ne sont que des wrapper de l'API, elles simplifient la vie des VBistes et autres bidouilloux mais dans tous les cas elles finissent par appeler l'API.
Des benchs pour savoir si une ligne droite est plus courte que 36 détours, inutile, c'est évident.
Pour info, j'ai légalement les sources de tous les Windows, ce que tu aurais pu comprendre au look de ma signature.
heptaeon
Messages postés4Date d'inscriptionlundi 2 mai 2005StatutMembreDernière intervention 5 novembre 2005 5 nov. 2005 à 12:27
[Extrais de l'MSDN]
Remarks
The RemoveDirectory function marks a directory for deletion on close. Therefore, the directory is not removed until the last handle to the directory is closed.
To recursively delete the files in a directory, use the SHFileOperation function.
Quant a ta comparaison ligne droite vs détour, je ne suis pas tout a fait de ton avis. On retrouve souvent des fonctions dites "plus haut niveau" plus performante. Simplement car elle ne refond pas toujours les même opération de vérification. Elle utilise des "Sorte de racourcis".
Par contre si tu as le code source de cette fonction et que tu me certifie qu'elle utilise des RemoveDirectory, Je suis de ton avis si c'est bien compiler utiliser une boucle de RemoveDirectory bien faite est plus performante.
Personelement, Je n'ai pas les code sources de windows, donc a toi de voir ce qu'il y a dans le code de cette fonction ^^.
Ps: Juste pour le pFrom, mon code marchais car l'élément suivant est a NULL, mais c'etait un coup de bol :D
schap25
Messages postés21Date d'inscriptionmercredi 21 mai 2008StatutMembreDernière intervention28 mai 2008 23 mai 2008 à 10:56
Bonjour, je cherche aussi a supprimer un repertoire.
Pour faire simple j'ai voulu essayer system("del mon_rep")
Mon repertoire étant C:/Documents and Settings/XXX/Local
Settings/Application Data/etcetc, la fenetre dos me repond : "Option
non valide "Documents".."
Je pense que cela est du à l'espace, mais par quoi le remplacer ?
yserver
Messages postés203Date d'inscriptionlundi 2 août 2004StatutMembreDernière intervention 8 septembre 2006 23 mai 2008 à 19:21
Tu a du te tromper. Ici, on parle de C/C++ et non de DOS.
Ce n'est pas le bon lieu pour parler de batch en DOC.
Si non oui, cela vient bien des espaces, mets le chemin entre guillemets.