Autor Beitrag
LicherMan
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Di 28.02.06 19:39 
Hallo @ all,
ich habe ein Problem mit der ListBox... und zwar will ich aus dieser mit dem Cursor eine Datei auswählen können und diese via Button von der Festplatte löschen.
Dazu habe ich mir quasi einen Explorer gebastelt der die Dateien in einem Verzeichnis aufzeigt (FindFirst - FindClose).
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
FindFirst(edtPfad.Text,faAnyFile,sr);
 lbxAnzeige.Items.Add(sr.Name);
  While FindNext(sr) = 0 do
   lbxAnzeige.Items.Add(sr.Name);
FindClose(sr);


Wie kann ich jetzt aber mit DeleteFile() die Datei löschen die ich markiert habe!?
Vielen Dank schon mal,
Gruß

Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt
Moderiert von user profile iconraziel: Topic aus Windows API verschoben am Mi 01.03.2006 um 14:08
Ivo@CoMRoK
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 258

Win XP
D3 Prof., D7 Pe.
BeitragVerfasst: Di 28.02.06 19:42 
ausblenden Delphi-Quelltext
1:
ExtractFileName(ListBox1.Items[ListBox1.ItemIndex]);					


Ich denke das sollte dir helfen^^

_________________
Fällt der Bauer tot vom Traktor, stand am Waldrand ein Reaktor.
Ein altes indianisches Sprichwort besagt:Es kann gefährlich sein gelben Schnee zu essen.
LicherMan Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Di 28.02.06 19:49 
Also ausführen kann ich das so - ja.
Aber löschen tut er die Datei nicht.
hmmm in der Hilfe steht :
ExtractFileName extrahiert den Namen und die Erweiterung aus einem Dateinamen.
kp - hab damit noch nie arbeiten müssen!
Aber trotzdem danke!
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 28.02.06 19:53 
Moin!

Lass dir doch mal mit ShowMessage() statt Delete() anzeigen, was er denn da Löschen soll... :wink: Wirkt manchmal Wunder, wenn man sieht, was der Computer zu tun versucht, wenn´s nicht klappt (Vermutung: du hast den Pfad nicht mit drin... :wink:)

cu
Narses
LicherMan Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Di 28.02.06 20:14 
Also hab bisher beide Tipps mal umgesetzt aber wie ichs wende und drehe - es klappt bei mir nicht!
Durch das ShowMessage() wird zwar der richtige Dateiname angezeigt aber nichts gelöscht!

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
procedure TForm1.btnLoeschenClick(Sender: TObject);
begin
//ShowMessage(lbxAnzeige.Items[lbxAnzeige.ItemIndex]);
  DeleteFile(lbxAnzeige.Items[lbxAnzeige.ItemIndex]);
    ExtractFileName(lbxAnzeige.Items[lbxAnzeige.ItemIndex]);
end;


Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 28.02.06 20:19 
Moin!

user profile iconLicherMan hat folgendes geschrieben:
Durch das ShowMessage() wird zwar der richtige Dateiname angezeigt aber nichts gelöscht!

Ja, klar, damit soll doch auch nur sichtbar werden, welchen Parameter du an DeleteFile() übergibst... :roll: :wink:

OK, also nochmal deutlicher: Du mußt beim Löschen den voll qualifizierten Dateinamen angeben (mit Pfad), sonst wird das nix. Und soweit ich das sehe, tust du das nicht. :wink:

cu
Narses
LicherMan Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Di 28.02.06 23:05 
Mir ist ja klar, wenn ich den Pfad angebe, dass ich dann die Datei löschen kann - jedoch ist es jeweils nur die, die ich bei DeleteFile() im Pfad mit angebe.
Mein Problem ist es, dass die Datei automatisch gelöscht werden soll, die in der ListBox markiert wird- und das könnten ja auch quasi verschiedene sein.

Also muss es einen Zusammenhang mit DeleteFile() und ListBox1.Items oder ListBox.ItemIndex geben. Trotzdem danke!
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Di 28.02.06 23:15 
Moin!

user profile iconLicherMan hat folgendes geschrieben:
Mir ist ja klar, wenn ich den Pfad angebe, dass ich dann die Datei löschen kann - jedoch ist es jeweils nur die, die ich bei DeleteFile() im Pfad mit angebe.
Mein Problem ist es, dass die Datei automatisch gelöscht werden soll, die in der ListBox markiert wird- und das könnten ja auch quasi verschiedene sein.

Also muss es einen Zusammenhang mit DeleteFile() und ListBox1.Items oder ListBox.ItemIndex geben. Trotzdem danke!

:gruebel: Sag mal, versteh ich dich nicht, oder du mich? :gruebel:

Du hast eine Listbox mit Dateinamen (ohne Pfad), du möchtest die ausgewählte Datei löschen (per Buttonklick oder sowas), du hast den Pfad zur Datei, bis hierhin korrekt?

Was sollte dich hindern, den Pfad zusammen mit dem aktuell ausgewählten Dateinamen an DeleteFile() zu übergeben?

cu
Narses
Hux
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 171



BeitragVerfasst: Mi 01.03.06 08:21 
Hi...

Häh..., formulier dein Problem bitte mal genauer..., ich kapiers irgendwie nicht...
wie, du willst n paar Dateien markieren und sie irgendwie löschen???
Wenn du alle von der Listbox löschen willst, mach es so:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
var i:integer;
begin
for i:=0 to Listbox1.Items.Count do  begin
DeleteFile(ListBox1.Items[i]);
end;
end;
end.


Aber sonst peil ich dein Prob net...

Greetz
Vera
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 82

WinXP Home
Delphi 2005 Personal
BeitragVerfasst: Mi 01.03.06 09:59 
So wirklich verstehe ich die Probleme auch nicht.

Hier ein Beispiel das funktioniert (habs gerade getestet). Für das Beispiel brauchst Du ein Form mit einer Listbox (ListBox1) und einem Button (ButtonDelete). Außerdem benötigst Du die Procedure FindFiles aus diesem FAQ Beitrag: www.delphi-library.de/viewtopic.php?t=1107

Ansonsten hier der Code:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
procedure TForm1.FormCreate(Sender: TObject);
begin
  FindFiles ('c:\test', '*.*', False, ListBox1.Items);
end;

procedure TForm1.ButtonDeleteClick(Sender: TObject);
var
  I: Integer;
begin
  for i := ListBox1.Items.Count -1 downto 0 do
    if Listbox1.Selected [I] then
    begin
      // Datei auf der Festplatte löschen
      DeleteFile (ListBox1.Items [i]);

      // Eintrag in der Listbox löschen
      Listbox1.Items.Delete (i);
    end;
end;


Viel Spaß damit. ;-)

Bye, Vera!
LicherMan Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mi 01.03.06 12:09 
Hallo @ all!
Also hier nochmal genauer das Problem:
In einer ListBox werden durch FindFirst()- FindNext() Dateien aufgelistet.
Wenn jetzt eine Datei markiert wird (ListBox1.Items.Selected (i)) dann soll diese via Button-Click von der Festplatte gelöscht werden.
Die Hilfestellungen die gepostet wurden waren alle OK - haben ohne Fehlerausgabe funktioniert - jedoch wurden keine Dateien von der Platte gelöscht!
Bei der letzten Hilfe wurde lediglich die Datei aus der ListBox entfernt : [ListBox.Items.Delete (i)].
Hoffe, ihr versteht jetzt wo das Problem liegt!
Trotzdem danke,
Gruß
Miri
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 657


Delphi 3 Prof., Delphi 2005 PE
BeitragVerfasst: Mi 01.03.06 12:25 
dann lass uns doch mal nicht länger im dunkeln tappen und zeig mal etwas (oder auch etwas mehr) von deinem quelltext!
was genau steht denn nu in deiner listbox? steht da "hallo.txt" oder "c:/bla/hallo.txt" ?
denn nur mit nem kompletten pfad (also letzterer variante) kannst du die datei wirklich löschen lassen...
azrael_7
ontopic starontopic starontopic starontopic starofftopic starofftopic starofftopic starofftopic star
Beiträge: 78

Windows Vista
D2005 Pers. [de]
BeitragVerfasst: Mi 01.03.06 12:33 
wenn ich das richtig sehe gibst du das Verzeichnis in dem die Dateien liegne in einem Edit-Feld an... versuch mal dieses in die Pfadangabe für's delete() mit aufzunehmen...

beachte, dass der Inhalt deines Edit-Feldes dann mit einem Slash enden muss...

_________________
-·- Es gibt Leute die bringen Freude, wohin sie gehen -·-
-·- und es gibt Leute, die bringen Freude, wenn sie gehen -·-
LicherMan Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mi 01.03.06 13:55 
Hier mein Quelltext:

ausblenden volle Höhe Delphi-Quelltext
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:
37:
38:
39:
40:
41:
42:
43:
44:
45:
procedure TForm1.FormCreate(Sender: TObject);
begin
caption := 'Programm zum Löschen von Dateien';
lblAnzeige.Caption := 'Progamm zum Löschen von Dateien';
lbxAnzeige.Clear;
edtPfad.Text := 'C:\Dokumente und Einstellungen\Jan\Desktop\Neuer Ordner\*';
btnAnzeige.Caption := 'Dateien Anzeigen';
btnLoeschen.Caption := 'Löschen';
bitbtnClose.Kind := bkClose;
btnNeu.Caption := 'Clear Search';
end;

procedure TForm1.btnAnzeigeClick(Sender: TObject);
var sr: TSearchRec;
begin
 lbxAnzeige.Clear;

 FindFirst(edtPfad.Text,faAnyFile,sr);

 lbxAnzeige.Items.Add(sr.Name);
   While FindNext(sr) = 0 do
   lbxAnzeige.Items.Add(sr.Name);
 FindClose(sr);
end;

procedure TForm1.btnNeuClick(Sender: TObject);
begin
 lbxAnzeige.Clear;
end;{btnNeuClick}

procedure TForm1.btnLoeschenClick(Sender: TObject);
var i : Integer;
begin
 //ExtractFileName(lbxAnzeige.Items[lbxAnzeige.ItemIndex]);
 For i := lbxAnzeige.Items.Count -1 downto 0 do
   if lbxAnzeige.Selected [i] then
    begin
     DeleteFile(lbxAnzeige.Items [i]);

     lbxAnzeige.Items.Delete(i);
   end;
 //ShowMessage(lbxAnzeige.Items[lbxAnzeige.ItemIndex]);
end;{btnLoeschenClick}

end.{procedure}


Moderiert von user profile iconraziel: Delphi-Tags hinzugefügt
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Mi 01.03.06 14:02 
Moin!

Es wäre sehr schön, wenn du den Quelltext in Delphi-Tags einpackst, dann kann man das auch vernünftig lesen! :mahn:

Hier ist vermutlich dein Fehler:
ausblenden Delphi-Quelltext
1:
DeleteFile(lbxAnzeige.Items [i]);					

Sollte sein:
ausblenden Delphi-Quelltext
1:
DeleteFile(IncludeTrailingPathDelimiter(edtPfad.Text)+lbxAnzeige.Items.Strings[lbxAnzeige.ItemIndex]);					

(ungetestet, ggfs. Tiepvehler, sollte aber so gehen)

cu
Narses
LicherMan Threadstarter
Hält's aus hier
Beiträge: 8



BeitragVerfasst: Mi 01.03.06 18:46 
Nein tut mir leid!
so funktioniert es auch nicht!
Ich denk ma das Problem liegt darin, dass der Pfad aus der Listbox übergeben werden muss.
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10185
Erhaltene Danke: 1261

W11x64
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Do 02.03.06 00:49 
Moin!

Ach ja, du hast die Suchmaske an den Pfad geklascht, so wird das natürlich auch nix... :wink:
Probier das mal, das sollte dann aber gehen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
procedure TForm1.FormCreate(Sender: TObject);  
//[...]
  edtPfad.Text := 'C:\Dokumente und Einstellungen\Jan\Desktop\Neuer Ordner\'; // * weg
//[...] 
procedure TForm1.btnAnzeigeClick(Sender: TObject);  
//[...] 
  FindFirst(edtPfad.Text+'*',faAnyFile,sr); // hier die Maske dranhängen
//[...] 
procedure TForm1.btnLoeschenClick(Sender: TObject);  
  var
    i: Integer;  
begin  
  for i := lbxAnzeige.Items.Count -1 downto 0 do  
    if (lbxAnzeige.Selected[i]) then begin  
      DeleteFile(edtPfad.Text+lbxAnzeige.Items[i]);
      lbxAnzeige.Items.Delete(i);  
    end;  
end;{btnLoeschenClick}

cu
Narses

_________________
There are 10 types of people - those who understand binary and those who don´t.