Avatar billede bolorolo Nybegynder
26. september 2014 - 19:18 Der er 4 kommentarer

Slette filer inkl. filer i undermapper med TSHFileOpStruct

Hejsa.

Jeg prøver at lave et lille program som rydder temp data væk

Af en eller anden grund vil den ikke sletter tmp filerne i undermapperne også.

koden ser ud således (uses shellapi)

procedure TForm1.Button1Click(Sender: TObject);
var
  FileOp: TSHFileOpStruct;
begin
  FileOp.Wnd := GetDesktopWindow;
  FileOp.wFunc := FO_DELETE;
  FileOp.pFrom := 'C:\test\*.tmp'#0;
  FileOp.pTo := nil;
  FileOp.fFlags := FOF_NOCONFIRMATION;
  SHFileOperation( FileOp );


ER det mig som har misforstået SHFileOpStruct funktionen eller har jeg glemt noget?
Avatar billede stone Forsker
27. september 2014 - 08:50 #1
//uses shellapi

procedure DelFilesFromDir(Directory, FileMask: string; DelSubDirs: Boolean);
var
  SourceLst: string;
  FOS: TSHFileOpStruct;
begin
  FillChar(FOS, SizeOf(FOS), 0);
  FOS.Wnd := Application.MainForm.Handle;
  FOS.wFunc := FO_DELETE;
  SourceLst := Directory + '\' + FileMask + #0;
  FOS.pFrom := PChar(SourceLst);
  if not DelSubDirs then
    FOS.fFlags := FOS.fFlags OR FOF_FILESONLY;
  // Remove the next line if you want a confirmation dialog box
  FOS.fFlags := FOS.fFlags OR FOF_NOCONFIRMATION;
  // Add the next line for a "silent operation" (no progress box)
  // FOS.fFlags := FOS.fFlags OR FOF_SILENT;
  SHFileOperation(FOS);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
DelFilesFromDir('C:\test', '*.*', TRUE);
end;
Avatar billede stone Forsker
27. september 2014 - 08:52 #2
forklaring

DelFilesFromDir('C:\test', '*.*', TRUE);
//sletter undermapper

DelFilesFromDir('C:\test', '*.*', FALSE);
//sletter ikke undermapper
Avatar billede bolorolo Nybegynder
27. september 2014 - 10:58 #3
Hej

Mange tak for svaret, det virker ihvertfald

men kunne jeg ikke bare have tilføjet TRUE i min egen kode?

SHFileOperation( FileOp, TRUE );

Hvordan hvis jeg vil slette flere filtyper på samme tid:
*.old, *.bak, *.tmp;

Så skal de så vidt jeg kan læse mig frem til defineres således
*.old#0, *.bak#0, *.tmp#0;
Avatar billede stone Forsker
27. september 2014 - 11:31 #4
nej du skal ikke definere de filer du skal slette, for koden sletter underbib og filer i c:\test mappen uanset hvilken extension de har.
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

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