| Autor |
Beitrag |
LicherMan
Hält's aus hier
Beiträge: 8
|
Verfasst: 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).
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 raziel: Delphi-Tags hinzugefügtModeriert von raziel: Topic aus Windows API verschoben am Mi 01.03.2006 um 14:08
|
|
Ivo@CoMRoK
      
Beiträge: 258
Win XP
D3 Prof., D7 Pe.
|
Verfasst: Di 28.02.06 19:42
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 
Hält's aus hier
Beiträge: 8
|
Verfasst: 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
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 28.02.06 19:53
Moin!
Lass dir doch mal mit ShowMessage() statt Delete() anzeigen, was er denn da Löschen soll...  Wirkt manchmal Wunder, wenn man sieht, was der Computer zu tun versucht, wenn´s nicht klappt (Vermutung: du hast den Pfad nicht mit drin...  )
cu
Narses
|
|
LicherMan 
Hält's aus hier
Beiträge: 8
|
Verfasst: 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!
Delphi-Quelltext 1: 2: 3: 4: 5: 6:
| procedure TForm1.btnLoeschenClick(Sender: TObject); begin DeleteFile(lbxAnzeige.Items[lbxAnzeige.ItemIndex]); ExtractFileName(lbxAnzeige.Items[lbxAnzeige.ItemIndex]); end; |
Moderiert von raziel: Delphi-Tags hinzugefügt
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 28.02.06 20:19
Moin!
LicherMan 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...
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.
cu
Narses
|
|
LicherMan 
Hält's aus hier
Beiträge: 8
|
Verfasst: 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
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Di 28.02.06 23:15
Moin!
LicherMan 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! |
 Sag mal, versteh ich dich nicht, oder du mich?
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
      
Beiträge: 171
|
Verfasst: 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:
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
      
Beiträge: 82
WinXP Home
Delphi 2005 Personal
|
Verfasst: 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:
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 DeleteFile (ListBox1.Items [i]);
Listbox1.Items.Delete (i); end; end; |
Viel Spaß damit.
Bye, Vera!
|
|
LicherMan 
Hält's aus hier
Beiträge: 8
|
Verfasst: 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
      
Beiträge: 657
Delphi 3 Prof., Delphi 2005 PE
|
Verfasst: 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
      
Beiträge: 78
Windows Vista
D2005 Pers. [de]
|
Verfasst: 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 
Hält's aus hier
Beiträge: 8
|
Verfasst: Mi 01.03.06 13:55
Hier mein 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;
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(lbxAnzeige.Items [i]);
lbxAnzeige.Items.Delete(i); end; end;
end. |
Moderiert von raziel: Delphi-Tags hinzugefügt
|
|
Narses
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: 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!
Hier ist vermutlich dein Fehler:
Delphi-Quelltext 1:
| DeleteFile(lbxAnzeige.Items [i]); |
Sollte sein:
Delphi-Quelltext 1:
| DeleteFile(IncludeTrailingPathDelimiter(edtPfad.Text)+lbxAnzeige.Items.Strings[lbxAnzeige.ItemIndex]); |
(ungetestet, ggfs. Tiepvehler, sollte aber so gehen)
cu
Narses
|
|
LicherMan 
Hält's aus hier
Beiträge: 8
|
Verfasst: 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
      

Beiträge: 10185
Erhaltene Danke: 1261
W11x64
TP3 .. D7pro .. D10.2CE
|
Verfasst: Do 02.03.06 00:49
Moin!
Ach ja, du hast die Suchmaske an den Pfad geklascht, so wird das natürlich auch nix...
Probier das mal, das sollte dann aber gehen:
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\'; procedure TForm1.btnAnzeigeClick(Sender: TObject); FindFirst(edtPfad.Text+'*',faAnyFile,sr); 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; |
cu
Narses
_________________ There are 10 types of people - those who understand binary and those who don´t.
|
|