Usuwanie do kosza

0

Dlaczego jezeli wykonuje takiego typu kod:

for i := 0 to Form1.ListBox1.Items.Count - 1 do
begin
//tu usuwanie do kosza (procedura wzieta z Faq)
end;

gdzie w Listboxie jest lista plikow do usuniecia...

Problem polega na tym, ze pierwszy plik z listy jest usuwany a dla pozostałych jest "Błąd systemu plików (1026)". Czy można cos na to poradzić?

0

Przypuszczam, ze procedura usuwania usuwa rowniez odpowiednia nazwe z ListBoxu.

Sprobuj w druga strone:

for i:=Pred(Form1.ListBox1.Count) downto 0 do

0

Chyba jednak nie bo nie stosuje procedury ListBox1.Clear.
Wydaje mi sie ze chodzi tu o zmienna R:THFileOpstruct (czy cos w tym stylu :-)) Dla pierwszego pliku jest wykonywana operacja prawidłowo a poźniej trzeba zwolnic ta zmienna i dla kolejnego pliku stworzyc ja jeszcze raz....tylko jak. Nie ma ani R.Create ani R.Free...kosmiczne...moze jednak sie myle....jest jakis inny sposob?

0

Chyba jednak nie bo nie stosuje procedury ListBox1.Clear.

A nie masz jakiegos ListBox.Items.Delete? Tak czy owak podrzuc link do tego faq gdzie jest procedura, to polukam. A samemu nie chce mi sie szukac...

0

Procedura wyglada tak:

uses
ShellAPI;

var
R : TSHFileOpStruct;
begin
with R do
begin
Wnd:=Handle; // oznaczenie uchwytu
wFunc := FO_DELETE;// opcja
pFrom:='c:kody.html'; // z pliku
fFlags := FOF_ALLOWUNDO;
end;
SHFileOperation(R);

Form1.ListBox1.Items.Delete tez nie uzywam :-)

0

Tak czy owak u mnie po odwroceniu kolejnosci na downto zaczelo dzialac.

Oto moj kod:

uses ShellApi;
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject); //tworzenie testowych plikow do usuniecia
var
i:integer;
f:file;
fn:string;
begin
for i:=0 to 4 do
begin
fn:=Char(random(20)+65)+char(random(20)+65);
assignfile(f,fn);
Rewrite(f);
CloseFile(f);
ListBox1.Items.Add(fn);
end;
end;

procedure TForm1.Button1Click(Sender: TObject); //usuwanie plikow
var
R : TSHFileOpStruct;
i:integer;

begin
for i:=Pred(ListBox1.Items.Count) downto 0 do
begin
with R do
begin
Wnd:=Handle; // oznaczenie uchwytu
wFunc := FO_DELETE;// opcja
pFrom:=PAnsiChar(ListBox1.Items[i]); // z pliku
fFlags := FOF_ALLOWUNDO;
end;
SHFileOperation(R);
end;
end;

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