Comment delete des fichiers d'un dossier systeme

BenXbox Messages postés 210 Date d'inscription mercredi 5 juin 2002 Statut Membre Dernière intervention 14 août 2007 - 15 mai 2005 à 13:56
BenXbox Messages postés 210 Date d'inscription mercredi 5 juin 2002 Statut Membre Dernière intervention 14 août 2007 - 20 mai 2005 à 01:37
Salut à tous,
Voila j'ai essayer de supprimer manuellement le dossier Cookies de ma session Xp, et il m'affiche un message comme quoi je ne peut pas supprimer le dossier, j'ai essayer avec la fonction suivante et il m'affiche le même message :

function EffaceDossier(Dossier : String): Boolean; var FileOpStruct : TShFileOpStruct;
begin
FileOpStruct.Wnd := 0;
FileOpStruct.wFunc := FO_DELETE;
FileOpStruct.pFrom := PChar(Dossier);
FileOpStruct.pTo := nil;
FileOpStruct.fFlags := FOF_NOCONFIRMATION or FOF_SILENT;
FileOpStruct.lpszProgressTitle := nil;Result :ShFileOperation(FileOpStruct) 0;
end;

Alors j'aurais voulue savoir si il y a une moyen de supprimer les fichiers et les sous dossiers qui sont à l'intérieure de ce dossier.

Merci d'avance.


Mon Site Web : http://Www.BenXbox.Fr.sT

20 réponses

cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
16 mai 2005 à 08:01
Salut BenBox,



Il faut probablement modifier les attibuts du dossier. Il doit avoir l'attribut System qui t'empêche de l'effacer.





Pout lire les attributs : Attributs := GetFileAttributes(PChar(Dossier)); // Attributs : DWord

Pour les modifier :
SetFileAttributes(PChar(Dossier)
, Attribut
s);



Avec pour valeurs d'attributs (dans Windows.pas) :



{$EXTERNALSYM FILE_ATTRIBUTE_READONLY}

FILE_ATTRIBUTE_READONLY = $00000001;

{$EXTERNALSYM FILE_ATTRIBUTE_HIDDEN}

FILE_ATTRIBUTE_HIDDEN = $00000002;

{$EXTERNALSYM FILE_ATTRIBUTE_SYSTEM}

FILE_ATTRIBUTE_SYSTEM = $00000004;

{$EXTERNALSYM FILE_ATTRIBUTE_DIRECTORY}

FILE_ATTRIBUTE_DIRECTORY = $00000010;

{$EXTERNALSYM FILE_ATTRIBUTE_ARCHIVE}

FILE_ATTRIBUTE_ARCHIVE = $00000020;

{$EXTERNALSYM FILE_ATTRIBUTE_NORMAL}

FILE_ATTRIBUTE_NORMAL = $00000080;

{$EXTERNALSYM FILE_ATTRIBUTE_TEMPORARY}

FILE_ATTRIBUTE_TEMPORARY = $00000100;

{$EXTERNALSYM FILE_ATTRIBUTE_COMPRESSED}

FILE_ATTRIBUTE_COMPRESSED = $00000800;

{$EXTERNALSYM FILE_ATTRIBUTE_OFFLINE}

FILE_ATTRIBUTE_OFFLINE = $00001000;





Donc dans ton cas tu peux essayer en ajoutant, au debut de ta procédure, la ligne :


SetFileAttributes(PChar(Dossier)
,
FILE_ATTRIBUTE_DIRECTORY
);






Ken@vo

<hr size="2" width="100%">Code, Code, Codec !




http://www.pourflorenceethussein.org/

[%3C/body ]
0
BenXbox Messages postés 210 Date d'inscription mercredi 5 juin 2002 Statut Membre Dernière intervention 14 août 2007
16 mai 2005 à 12:29
Salut Kenavo et merci de m'aider pour ce problème,
Donc si j'ai bien compris je doit faire sa :
function EffaceDossier(Dossier : String): Boolean; var FileOpStruct : TShFileOpStruct;
begin
SetFileAttributes(PChar(Dossier), FILE_ATTRIBUTE_DIRECTORY);
FileOpStruct.Wnd := 0;
FileOpStruct.wFunc := FO_DELETE;
FileOpStruct.pFrom := PChar(Dossier);
FileOpStruct.pTo := nil;
FileOpStruct.fFlags := FOF_NOCONFIRMATION or FOF_SILENT;
FileOpStruct.lpszProgressTitle := nil;Result :ShFileOperation(FileOpStruct) 0;
end;

J'ai essayer et j'ai toujours le message comme quoi c'est un dossier système.
Merci d'avance.


Mon Site Web : http://Www.BenXbox.Fr.sT
0
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
16 mai 2005 à 19:18
Ah ! M... ! C'est bien l'attribut auquel je pensais !



Serait-il référencé comme dossier système ailleurs ? En utilisant la fonction suivante, tu peux lire les attributs du dossier :


Attribut := GetFileAttributes(PChar(Dossier));




Pas mieux ! Désolé !



Ken@vo

<hr size="2" width="100%">Code, Code, Codec !




http://www.pourflorenceethussein.org/

[%3C/body ]
0
BenXbox Messages postés 210 Date d'inscription mercredi 5 juin 2002 Statut Membre Dernière intervention 14 août 2007
16 mai 2005 à 23:21
J'ai pas compris l'histoire du Attribut := GetFileAttributes(PChar(Dossier));

Mon Site Web : http://Www.BenXbox.Fr.sT
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
17 mai 2005 à 09:19
C'était pour te permettre de vérifier les attributs du dossier à supprimer avant de faire l'appel à
ShFileOperation



Le problème vient sans doute du fait que ton répertoire Cookies est
sans doute référencé dans la base de registres comme répertoire spécial
: voir clés

HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders et HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\User Shell Folder




Tu aurrais peut être intéret à supprimer les cookies sans effacer le
répertoire ! Donc à écrire une fonction VideDossier plutôt que
EffaceDossier.



Ken@vo

<hr size="2" width="100%">Code, Code, Codec !




http://www.pourflorenceethussein.org/

[%3C/body ]
0
BenXbox Messages postés 210 Date d'inscription mercredi 5 juin 2002 Statut Membre Dernière intervention 14 août 2007
17 mai 2005 à 12:35
Et avec la fonction VideDossier, sa peut supprimer les SousDossier ?


Mon Site Web : http://Www.BenXbox.Fr.sT
0
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
17 mai 2005 à 13:36
Faut essayer !



Ken@vo

<hr size="2" width="100%">Code, Code, Codec !




http://www.pourflorenceethussein.org/

[%3C/body ]
0
BenXbox Messages postés 210 Date d'inscription mercredi 5 juin 2002 Statut Membre Dernière intervention 14 août 2007
17 mai 2005 à 16:06
Le problème c'est que je ne sais pas du tout comment faire, sinon je l'aurais fais :)


Mon Site Web : http://Www.BenXbox.Fr.sT
0
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
17 mai 2005 à 18:45
Bon, on y va !



Le pricipe que je te donne est général, je ne sais pas si il te donnera
satisfaction. Il y a des mystères pour moi autour des cookies !

Le seul truc dont je sois sûr, est que dasns un répertoire \Cookies, il y a un fichier Index.dat qui n'est guère manipulable.



function VideDossier(Dossier : String): Boolean;

var


FileOpStruct : TShFileOpStruct;


SearchRec : TSearchRec;


s : String;

Resu : Integer;

begin

S := '';

Resu := FindFirst(Dossier+'\*.*',faAnyFile,SearchRec); // recherche tous les fichiers

While Resu = 0 do

begin

if (SearchRec.Name[1]<>'.') and (SearchRec.Name<>'INDEX.DAT') then // si fichier à éliminer

s:= s+Dossier+'\'+SearchRec.Name+#0; // constitution de la liste des fichiers à effacer

Resu := FindNext(SearchRec);

end ;

s: =s+#0;

FindClose(SearchRec);

SetFileAttributes(PChar(Dossier), FILE_ATTRIBUTE_DIRECTORY);

FileOpStruct.Wnd := 0;

FileOpStruct.wFunc := FO_DELETE;

FileOpStruct.pFrom := PChar(s); // liste des fichier à effacer

FileOpStruct.pTo := nil;

FileOpStruct.fFlags := FOF_NOCONFIRMATION or FOF_SILENT;

FileOpStruct.lpszProgressTitle := nil;

Result :ShFileOperation(FileOpStruct) 0;

end;



A tester !



Ken@vo
<hr size="2" width="100%">Code, Code, Codec !

[%3C/body ]
0
BenXbox Messages postés 210 Date d'inscription mercredi 5 juin 2002 Statut Membre Dernière intervention 14 août 2007
17 mai 2005 à 18:59
C'est une bombe ton code il marche trop bien, merci à toi :)


Mon Site Web : http://Www.BenXbox.Fr.sT
0
BenXbox Messages postés 210 Date d'inscription mercredi 5 juin 2002 Statut Membre Dernière intervention 14 août 2007
17 mai 2005 à 19:01
Enfaite non sa marche pas super bien lol, sa supprime que les fichiers qui sont dans le dossier, mais sa delete pas les sous dossier.

Mon Site Web : http://Www.BenXbox.Fr.sT
0
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
17 mai 2005 à 19:39
?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!?!


Ken@vo

<hr size="2" width="100%">Code, Code, Codec !




http://www.pourflorenceethussein.org/

[%3C/body ]
0
BenXbox Messages postés 210 Date d'inscription mercredi 5 juin 2002 Statut Membre Dernière intervention 14 août 2007
17 mai 2005 à 19:58
Bas pour les cookies sa marche impecables, mais pour l'historique comme c'est dans des sous dossier sa ne marche pas. :(


Mon Site Web : http://Www.BenXbox.Fr.sT
0
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
18 mai 2005 à 09:23
Enlève le flag FOF_SILENT
(et même FOF_NOCONFIRMATION )
pour
avoir un retour d'infomation du système, Il te dira pourquoi il
ne veut pas effacer tes sous répertoires (sytèmes, read-only, utilisés
par un autre programme,...)


Ken@vo

<hr size="2" width="100%">Code, Code, Codec !




http://www.pourflorenceethussein.org/

[%3C/body ]
0
BenXbox Messages postés 210 Date d'inscription mercredi 5 juin 2002 Statut Membre Dernière intervention 14 août 2007
18 mai 2005 à 11:54
Il dit rien du tout quant j'enleve cette ligne de code : FileOpStruct.fFlags := FOF_NOCONFIRMATION or FOF_SILENT;


Mon Site Web : http://Www.BenXbox.Fr.sT
0
BenXbox Messages postés 210 Date d'inscription mercredi 5 juin 2002 Statut Membre Dernière intervention 14 août 2007
19 mai 2005 à 01:40
Donc j'ai avancer un petit peu, j'ai réussie à afficher dans une ListBox tout les fichiers, mais j'arrive toujours pas à supprimer, donc je mais le code, si tu as une idée :
procedure TForm1.Recherche(Base : string; SubDir : string = '');
begin
if FindFirst(Base+SubDir+'*', faAnyFile, SR) = 0 then
begin
repeat
if (SR.Name <> '.') and (SR.Name <> '..') then
begin
if (SR.Attr and faDirectory) = 0 then
begin
ListBox1.Items.Append(SubDir+SR.Name);
ListBox1.Perform(WM_VSCROLL, SB_BOTTOM, 0);
end else Recherche(Base, SubDir+SR.Name+'\');
end;
until FindNext(SR) <> 0;
FindClose(SR);
end;
end;


function EffaceDossier(Dossier : String): Boolean; var FileOpStruct : TShFileOpStruct;
begin
FileOpStruct.Wnd := 0;
FileOpStruct.wFunc := FO_DELETE;
FileOpStruct.pFrom := PChar(Dossier);
FileOpStruct.pTo := nil;
FileOpStruct.fFlags := FOF_NOCONFIRMATION or FOF_SILENT;
FileOpStruct.lpszProgressTitle := nil;Result :ShFileOperation(FileOpStruct) 0;
end;

Merci d'avance.

Mon Site Web : http://Www.BenXbox.Fr.sT
0
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
19 mai 2005 à 08:43
Il n'y a pas de problème pour effacer un répertoire non vide, si tous les fichiers et sous-répertoires qu'il contient peuvent être effacé.

Je pense qu'il doit y avoir quelque part dans ton arborescence un fichier rétif à l'affacement.



Tu peux essayer de les effacer un par un !



for i:=0 to Listbox1.Items.Count-1 do

if EffaceDossier(ListBox1.Items[i]) then

ListBox1.Items.Delete(i);



Il ne restera dans la listbox, que les fichiers non effacés, et il faudra comprendre pourquoi ceux-là restent !



Ken@vo

<hr size="2" width="100%">Code, Code, Codec !




http://www.pourflorenceethussein.org/

[%3C/body ]
0
BenXbox Messages postés 210 Date d'inscription mercredi 5 juin 2002 Statut Membre Dernière intervention 14 août 2007
19 mai 2005 à 12:38
Je le mais ou le code que tu mas donné ?


Mon Site Web : http://Www.BenXbox.Fr.sT
0
cs_Kenavo Messages postés 702 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 1 octobre 2009 5
19 mai 2005 à 13:28
Après l'appel à la procédure Recherche



Ken@vo

<hr size="2" width="100%">Code, Code, Codec !




http://www.pourflorenceethussein.org/

[%3C/body ]
0
BenXbox Messages postés 210 Date d'inscription mercredi 5 juin 2002 Statut Membre Dernière intervention 14 août 2007
20 mai 2005 à 01:37
Sa ne marche pas :(


Mon Site Web : http://Www.BenXbox.Fr.sT
0
Rejoignez-nous