[Delphi] Hoe inhoud dir deleten?

Pagina: 1
Acties:

  • Chimera
  • Registratie: December 2001
  • Laatst online: 17-07 11:24
Ik heb ff een snel vraagje, hoe kan ik de inhoud van een dir verwijderen (niet naar prullenbak)? het kan eventueel ook wel de hele dir verwijderen en daarna weer een lege aanmaken, maar dat andere is netjeser.

[16:19] <WhizzCat> de zon heeft nog maar 5 miljard jaar te leven naar het schijnt
[16:19] <WhizzCat> dus schiet op met dat protocol Chimera :p


Verwijderd

Findfirst en findnext. En dan de files deleten die je gevonden hebt

  • Chimera
  • Registratie: December 2001
  • Laatst online: 17-07 11:24
Ok, bedankt, dit is wat ik nu heb:
code:
1
2
3
4
5
6
7
8
9
10
procedure TForm1.Button1Click(Sender: TObject);
var SRec: TSearchRec;
begin
If FindFirst(Label1.Caption + '*.*', faAnyFile, SRec) = 0 Then
begin
DeleteFile(Label1.Caption + SRec.Name);
While FindNext(SRec) = 0 Do DeleteFile(Label1.Caption + SRec.Name);
FindClose(SRec);
end;
end;

Maar dan delete ie alleen de FILES die er in staan, maar ik wil ook de SUBDIRECTORIES (Oh ik zie nu dat ik dat niet had gevraagd |:()

[16:19] <WhizzCat> de zon heeft nog maar 5 miljard jaar te leven naar het schijnt
[16:19] <WhizzCat> dus schiet op met dat protocol Chimera :p


  • CyberSnooP
  • Registratie: Augustus 2000
  • Laatst online: 08-09 20:35

CyberSnooP

^^^^ schrijft --->

Beetje creativiteit kan geen kwaad lijkt me toch?
Je zult dus een van de FindFirst opties moeten veranderen zodat je ook directories krijgt.
Pseudo-code:
code:
1
2
3
4
5
6
Functie WisDirectory(dirNaam) {
  Voor elke ingang [i]entry[/i] in directory [i]dirNaam[/i] {
    Is [i]ingang[/i] een directory? --> WisDirectory(ingang)
    Is [i]ingang[/i] een file? --> WisFile(ingang)
  }
}

Misschien is de recursieve oplossing niet echt de beste, maar goed het is in ieder geval een idee.

|_____vakje______|


Verwijderd

geef gewoon bij findfirst directory aan.

  • Chimera
  • Registratie: December 2001
  • Laatst online: 17-07 11:24
Ja ok maar wat is dan de code om een dir te wissen? Want in die dir kunnen ook weer files zitten. DeleteDir() bestaat niet.

[16:19] <WhizzCat> de zon heeft nog maar 5 miljard jaar te leven naar het schijnt
[16:19] <WhizzCat> dus schiet op met dat protocol Chimera :p


Verwijderd

Lijkt me dat daar wel iets van in de windows-api te vinden is.

Tool->Internet options->Clear history komt ook een heel eind ;)

Verwijderd

hier een stukje code wat ongeveer hetzelfde doet maar ipv deleten copieren

ook kijkt ie of er een bestandje open is en zit er een hoop extra code in die je gewoon mag weghalen :)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
procedure Tform1.zoekdir(pad, topad : string ) ;
var
sr : tsearchrec ;
r :  integer ;
begin
r := findfirst(pad + '\*.*', faanyfile, sr);
 while r = 0 do
 begin
 statusbar1.Panels.Items[0].Text := sr.name;
 statusbar1.Update;
     if (sr.name <> '.') and (sr.name <> '..')  then
    begin
     if (sr.attr <> 0) and (fadirectory <> 0) then
     begin
    if not DirectoryExists (topad ) then
    begin
    ForceDirectories(topad );
    memo1.lines.Append('directory created : ' + topad) ;
    application.processmessages ;
    end;
     zoekdir(pad +'\'+sr.name, topad + '\'+ sr.name) ;
     end;
    end;
     if FileAge(topad + '\'+ sr.name) <> fileage(pad +'\' + sr.name) then
    begin
     if openfilecheck(pad + '\' + sr.name) = true then
        begin
        CopyFile(pchar(pad + '\' + sr.name),pchar(topad+ '\' + sr.name),FALSE);
        memo1.lines.append('file created : ' + topad + '\' + sr.name) ;
        application.processmessages;
        end;
    end;
   r := findnext(Sr)
 end;
findclose(sr);
end;

Verwijderd

De luie methode: laat de Windows Shell API het werk opknappen. :z
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
uses ShellApi;

function deldir(dir: String): boolean;
var fos: TSHFileOpStruct;
begin
  ZeroMemory(@fos, SizeOf(fos));
  with fos do 
  begin
    wFunc := FO_DELETE;
    fFlags := FOF_SILENT or FOF_NOCONFIRMATION;
    pFrom := PChar(dir);
  end;
  Result:=(0=ShFileOperation(fos));
end;

Door fFlags te veranderen heb je nog opties om het wel naar de prullenbak te verplaatsen of om zo'n mooi venstertje met vliegende documentjes te laten zien :P.
Pagina: 1