Avatar billede michael-schou Novice
05. juni 2007 - 11:57 Der er 5 kommentarer og
1 løsning

Slet alle mapper - Hvordan?

Hejsa.

Jeg har en mappe der hedder "Test" der hvor mit program ligger, i den er der nogle mapper nogen med filer og nogen uden.

Nu er mit sprøgsmål så :

Hvordan gør man så lige at når jeg trykker på en knap at den sletter alle mapper med og uden filer i - i mappen Test?

Mvh.

Michael
Avatar billede kroning Nybegynder
05. juni 2007 - 12:01 #1
Her er noget jeg engang fandt og gemte.

--------------------

Her er to mulige løsninger:

uses SysUtils;

function RemoveTree(DirName: string):Boolean;
var
  DirInfo: TSearchRec;
begin
    if FindFirst(DirName+'*.*', FaAnyfile, DirInfo) = 0 then
    repeat
          if (DirInfo.Attr = faDirectory) and (DirInfo.Name <> '.') and (DirInfo.Name <> '..') then
              RemoveTree(DirName+DirInfo.Name);
          if ((DirInfo.Attr and FaDirectory <> FaDirectory) and (DirInfo.Attr and FaVolumeId <>
FaVolumeID)) then
              DeleteFile(PChar(DirName+DirInfo.Name));
    until FindNext(DirInfo) <> 0;
    FindClose(DirInfo);
    Result:= RemoveDirectory(PChar(DirName));
end;

.....

uses ShellAPI;

function RemoveTree(DirName: String):Boolean;
Var
    F: SHFileOpstruct;
begin
        F.Wnd:= handle;
        F.wFunc:= FO_DELETE;
        F.pFrom:= PChar(DirName+#0);
        F.pTo:= nil;
        F.fFlags= nil;
        Result:= SHFileOperation(F);
end;

Prøv at kigge i Hjælp under SHFileOpstruct,
der er flere muligheder med fFlags,
F.eks vil FOF-ALLOWUNDO slette til Papirkurven.

Bemærk den dobbelte Null-terminering i pFrom,
hvis du vil slette flere mapper (eller filer) skriver du f.eks:
F.pFrom:= PChar(DirName1+#0+DirName2+#0+DirName3+#0);
Avatar billede michael-schou Novice
05. juni 2007 - 13:13 #2
Det første eksempel kan jeg godt starte op men den sletter ikke noget i mit dir ... ved ikke om jeg bruger den rigtigt :
RemoveTree('C:\Test\');

Det andet eksempel kan jeg ikke få til at virker den ved ikke hvad "handle" er og den brokker sig over :
at integer og boolean ikke kan gå sammen her : Result:= SHFileOperation(F);
Avatar billede kroning Nybegynder
05. juni 2007 - 13:30 #3
Det andet eksempel virker fint her?

Det første eksempel har jeg rettet til her så det virker.

------------------

function RemoveTree(DirName: String):Boolean;
Var
    F: SHFileOpstruct;
begin
    DirName:=ExcludeTrailingPathDelimiter(DirName);
    F.Wnd:= Application.MainForm.handle;
    F.wFunc:= FO_DELETE;
    F.pFrom:= PChar(DirName+#0);
    F.pTo:= nil;
    F.fFlags:= 0;
    Result:= SHFileOperation(F)=0;
end;
Avatar billede kroning Nybegynder
05. juni 2007 - 13:31 #4
Hov, det var omvendt. Det første eks. virker fint her og det andet eks. har jeg rettet så det virker.. her.
Avatar billede michael-schou Novice
05. juni 2007 - 20:49 #5
Takker det virker :-)

Smid et svar :-)
Avatar billede kroning Nybegynder
05. juni 2007 - 21:30 #6
ok
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester