Avatar billede michael-schou Novice
06. juni 2007 - 15:44 Der er 9 kommentarer og
1 løsning

Slette alle filer og mapper, selvom nogen af dem er i brug?

Hejsa.

Jeg ved hvordan man sletter alle filer i en mappe og jeg ved hvordan man sletter mapper.

Jeg har en mappe der hedder "Test" under denne mappe er der en del filer og mapper, nogle af filerne er i brug og nogle af mapperne er i brug.

Er der nogen herinde der ved hvordan man sletter alle filerne der ikke er i brug, og alle mapperne der ikke er i brug samt alle de filer i de mapper der er i brug, som ikke er i brug - kun ved at trykke på 1 knap?

og Selve "Test" mappen skal ikke slettes kun det der er inde under og som ikke er i brug + det skal slettes uden om papirkurven.

--EKS START --

Test\ De filer der ikke er i brug skal slettes
Bla.txt
bla2.txt
bla3.txt - Er i brug

Test\Test 1 - er i brug,men filerne er ikke i brug og skal slettes
bli.txt
bli2.txt

--EKS SLUT--

Mange Tak på forhånd.

Michal
Avatar billede dkn Nybegynder
06. juni 2007 - 15:53 #1
tror ikke det kan lade sig gøre uden en genstart af computeren.
Avatar billede michael-schou Novice
06. juni 2007 - 15:58 #2
Man kan gøre det i Total Commander, der sletter den alle filerne og fortæller så hvilke filer den ikke kunne slette fordi de er i bruge, men den sletter de andre, så det burde kunne lade sig gøre.
Avatar billede kroning Nybegynder
06. juni 2007 - 19:49 #3
Den første funktion som jeg postede og som du ikke lige kunne få til at virke kan hurtig laves om til det du har brug for.
Avatar billede dkn Nybegynder
07. juni 2007 - 00:18 #4
nåe ja, man skal jo også lige læse det ordentligt, troede du ville slette alt, også selvom det var i brug ... : )
Avatar billede hrc Mester
07. juni 2007 - 09:42 #5
I en dos-prompt ville "echo y | del ." tage livet af de filer der ikke blev brugt. Med katalogerne skulle vi nok over i noget med "for".

.. nå men.

Det er da ikke et problem at bygge det ind i en rekursiv filsøgealgoritme (det findes der mange eksmpler af her på Eksperten) og så pakke deletefile og deledirectory (?) ind i en try-except.
Avatar billede kroning Nybegynder
07. juni 2007 - 12:23 #6
Her får du en TStringList med de filer og mapper der ikke kunne slettes.

procedure RemoveTree(DirName: string;Rest : TStringList);
var
  DirInfo: TSearchRec;
begin
    DirName:=IncludeTrailingPathDelimiter(DirName);
    if FindFirst(DirName+'*.*', FaAnyfile, DirInfo)=0 then
    repeat
        if (DirInfo.Attr=faDirectory) and (DirInfo.Name<>'.') and (DirInfo.Name<>'..') then
            RemoveTree(DirName+DirInfo.Name,Rest);
        if ((DirInfo.Attr and FaDirectory<>FaDirectory) and (DirInfo.Attr and FaVolumeId<>FaVolumeID)) then
        if not DeleteFile(PChar(DirName+DirInfo.Name)) then
          Rest.Add('Kan ikke slette fil: '+DirName+DirInfo.Name);
    until FindNext(DirInfo)<>0;
    FindClose(DirInfo);
    if not RemoveDirectory(PChar(DirName)) then
        Rest.Add('Kan ikke slette mappe: '+DirName);
end;

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

Kaldes således:

var
    Rest : TStringList;
begin
    Rest:=TStringList.Create;
    RemoveTree('c:\test',Rest);
  ShowMessage(Rest.Text);
    Rest.Free;
end;
Avatar billede michael-schou Novice
07. juni 2007 - 15:02 #7
Ja det virker helt fint, så skal jeg bare have lavet en rutine hvor den udelukker de låste filer og mapper.
Avatar billede kroning Nybegynder
07. juni 2007 - 16:29 #8
Hvis filen/mappen er låst så sletter ovenstående procedure ikke filen/mappen.
Avatar billede michael-schou Novice
12. november 2007 - 08:48 #9
Hej kroning.

Smid et svar :-) Havde helt glemt at jeg havde det er spm åben undskyld, men har ikke været på længe og har ikke haft tid til at programmere i et stykke tid. :-)
Avatar billede kroning Nybegynder
12. november 2007 - 09:12 #10
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