Avatar billede terabyte Nybegynder
16. januar 2000 - 21:25 Der er 6 kommentarer og
1 løsning

Sletning af en fyldt folder...

Jeg har et problem med at slette en folder, hvori der er nogle file. Er der nogen som har et forslag ? Efter som at removedirectory() jo kun virker med en tømt folder...

Jeg vil da gerne ha' en funktion eller lignende

mvh.
Terabyte
Avatar billede s Nybegynder
16. januar 2000 - 22:00 #1
Kan du ikke starte med at fjerne alle filerne i folderen med en lykke eller sådan noget:

for hver_fil_i_folderen
sletfilen

og så derefter slette folderen?

jeg kender ikke så meget til delphi, men jeg kunne da forestille mig at dette virkede...
Avatar billede dj Nybegynder
16. januar 2000 - 22:12 #2
Prøv dette.

Jeg har lige bikset den lidt sammen, så jeg kan ikke garantere for slåfejl også videre, men jeg vil da stærkt tro at den virker ellers så sig lige til, så skal jeg nok få den til at virke i morgen, nu vil jeg til og i seng, godnat :)

--------------------------
Uses FileCTRL;

Procedure DelDir(dir:string);
var
  SearchRec: TSearchRec;
begin
  If Copy(dir,Length(dir),1)<>'\' then dir:=dir+'\';
  IF not DirectoryExists(dir) then begin
  showmessage('Directory "'+dir+'" does not exist!');
  exit;
  end;
  If FindFirst(dir+'*.*', faAnyFile, SearchRec)=0 Then
  Repeat
    If SearchRec.Attr=faDirectory Then begin
      If (SearchRec.Name='.')or(SearchRec.Name='..') then Continue;
      //Delete subfolders
      DelDir(dir+SearchRec.Name);
    end else begin
      DeleteFile(dir+SearchRec.Name);
    end;
  until FindNext(SearchRec) <> 0;
  FindClose(SearchRec);
end;
Avatar billede dj Nybegynder
16. januar 2000 - 22:12 #3
ups.. det var vist et svar :)
Avatar billede dj Nybegynder
16. januar 2000 - 22:13 #4
som sagt, jeg er søvnig .. zzzz
Avatar billede sjensen Nybegynder
16. januar 2000 - 22:26 #5
Som s skriver skal du først tømme directoriet og det gør du via en lykke. Når det er tømt sletter du selve directoriet:

function slet_dir(dir : string) : boolean;
var
  Srec  : TSearchrec;
  dummy : integer;
  sdir  : string;
begin
  result := false;
  sdir := trim(dir);
  if sdir = '' then exit;  // sæt evt. result true hvis dir ikke findes
  if directoryexists(dir) then
  begin
    if sdir[length(sdir)] <> '\' then sdir := sdir + '\';  // sørg for at der er en backslash som afslutning
    dummy := FindFirst(sdir+'*.*,faAnyfile, SRec);
    while dummy = 0 do
    begin
      if srec.attr <> fadirectory then
      begin
        deletefile(srec.filename);
      end;
      dummy := FindNext(SRec);
    end;
    findclose(SRec);
  end;
  // alle filer slettet, fjern dir
  removedir(dir);
  result := directoryexists(dir);  // blev det nu også slettet ?
end;

Du skal dog huske at have unit FileCtrl med i din uses clause for at kunne bruge directory funktionerne.

sjensen
Avatar billede delphi Nybegynder
17. januar 2000 - 22:11 #6
DJ: Du glemte at fjerne biblioteket til sidst i din rutine (med RemoveDir).  Ellers et klassisk eksempel på en fin lille rekursiv rutine, lige efter S's opskrift.

SJensen> Du mangler et check på filer der er direktories og som har navnet '.' eller '..'.  Disse 'filer' skal springes over, når man roder med Dos filstrukture (og dets efterkommere), idet de ikke kan slettes/renames/etc.  Desuden, så fejler din rutine, hvis der er underbiblioteker i det pågældende bibliotek.  Til allersidst: Du bør flytte dit kald af RemoveDir indenfor begin-end blokken (en linie op)  Som den står, vil et kald til rutinen med et ikke eksisterende dir-navn som parameter, resulterer i et forsøg på at slette pågældende bibliotek.

NiP
Avatar billede dj Nybegynder
17. januar 2000 - 23:11 #7
delphi>> ja .. jeg ved det godt, men det var sent var lidt sent i går og jeg var lidt træt :-)
Men jeg har snakket med Terabyte om det, og han har vist nok også fået det til at virke .. så hvis han nu bare ville få lukket det spørgsmål :)
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