Problem w usuwaniu wielu plików

0

Usuwam wiele plików naraz za pomocą funkcji SHFileOperation.
Ale jest jeden minus - nie są one usuwane na stałe tylko przenoszone do kosza. Jak temu zaradzić? :-/

0

A nie lepiej poleceniem DeleteFile ?

procedure TForm1.Button1Click(Sender: TObject);
var
usuwaj : integer;
begin
for usuwaj :=ListBox1.Items.Count-1 downto 0 do
 begin
   Application.ProcessMessages;
   DeleteFile(ListBox1.Items.Strings[ListBox1.ItemIndex]);
   ListBox1.Items.Delete(ListBox1.ItemIndex);
 end;
end;
0
Opi napisał(a)

A nie lepiej poleceniem DeleteFile ?

procedure TForm1.Button1Click(Sender: TObject);
var
usuwaj : integer;
begin
for usuwaj :=ListBox1.Items.Count-1 downto 0 do
 begin
   Application.ProcessMessages;
   DeleteFile(ListBox1.Items.Strings[ListBox1.ItemIndex]);
   ListBox1.Items.Delete(ListBox1.ItemIndex);
 end;
end;

shfileoperation() usuwa całe(pełne) katalogi, ty mu <ort>walnołeś </ort>kod, w tkórym nawet nie ma wyszukiwania tych plików i wprowadzania do listbox'a.

Pixel u mnie usuwa fizycznie a nie przenosi do kosza a mam tak :

var s:tshfileopstruct;
begin
s.wnd:=handle;
s.wfunc:=fo_delete;
s.pform:='c:\temp';
s.flags:=fof_noconfirmation or fof_renameoncollision;
s.fanyoperationsaborted:=true;
shfileoperation(s);
end;

(pisane z glowy/mogą być błędy)

0
with FOS do
begin
  Wnd := Form1.Handle;
  wFunc := FO_DELETE;
  pFrom := PChar(ExcludeTrailingPathDelimiter(ExtractShortPathName(Source)) + '\*.*' + #0);
  pTo := PChar(ExcludeTrailingPathDelimiter(ExtractShortPathName(Destination)) + 0);
  fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMMKDIR or FOF_NOCONFIRMATION;
  fAnyOperationsAborted := False;
end

Ja robie tak. Wydaje mi się że to zależy od ustawień systemowych.

0
PiXel napisał(a)
  fFlags := FOF_ALLOWUNDO or FOF_NOCONFIRMMKDIR or FOF_NOCONFIRMATION;

Jeśli przy usuwaniu ustawiasz flagę FOF_ALLOWUNDO, to na 100% dane zostana przesunięte do kosza.

0

Thx, pomogło ;)

1 użytkowników online, w tym zalogowanych: 0, gości: 1