Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi FileDeleter Problem (https://www.delphipraxis.net/63428-filedeleter-problem.html)

mOzZzI 18. Feb 2006 19:09


FileDeleter Problem
 
Hai,
ich versuche gerade einen FileDeleter zu schreiben, läuft auch schon ganz gut, doch ich weiß nicht wie ich Dateien löschen kann, die in einer ListBox als Dateipfad angezeigt werden...
Also, wie kann ich Dateien löschen, von denen ich nur den Dateipfad habe?

Gruß Philipp

PierreB 18. Feb 2006 19:11

Re: FileDeleter Problem
 
Hier im Forum suchenDeleteFile

Du kennst die Forensuche oder die Delphi - Hilfe ?

SirThornberry 18. Feb 2006 19:12

Re: FileDeleter Problem
 
du hast nur den Dateipfad? du musst doch auch wissen welche Datei du löschen willst. Oder willst du alle Dateien unter dem Pfad löschen? dann müsstest du diese vorher auflisten (findfirst etc.) und dann die gefundenen löschen.

mOzZzI 18. Feb 2006 19:17

Re: FileDeleter Problem
 
Liste der Anhänge anzeigen (Anzahl: 1)
also, ich hänge euch mal nen kleinen screenshot an...

Ich fülle die ListBox durch Drag&Drop dateien hinzu, und wenn man auf DeleteFiles klickt sollen alle gelöscht werden, die in der ListBox sind...
Hoffe ihr könnt mir weiterhelfen

SirThornberry 18. Feb 2006 19:18

Re: FileDeleter Problem
 
du hast doch den dateinamen mit pfad. Gehe einfach mit einer Schleife alle einträge der Listbox durch und rufe damit DeleteFile auf.

PierreB 18. Feb 2006 19:19

Re: FileDeleter Problem
 
Sollte der Dateiname nicht im Ordnerpfad enthalten sein füge ihn hinzu, und dann lösche die Dateien per Hier im Forum suchenDELETEFILE !

mOzZzI 19. Feb 2006 00:49

Re: FileDeleter Problem
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i:Integer;
begin
 for i := 0 to ListBox1.Items.Count - 1 do
begin
  DeleteFile(ListBox1.Items[i]);
end;
end;
Warum deleted er die Files nicht? Wo ist da der Fehler?

Christian Seehase 19. Feb 2006 01:15

Re: FileDeleter Problem
 
Moin mOzZzI,

DeleteFile ist eine Funktion, die Dir true oder false zurückliefert, je nachdem, ob das Löschen nun erfolgreich war oder nicht.
Frag' doch mal mit

Delphi-Quellcode:
ShowMessage(SysErrorMessage(GetLastError));
was schiefgegangen ist, wenn das Löschen fehlschlägt.

mOzZzI 19. Feb 2006 01:25

Re: FileDeleter Problem
 
Liste der Anhänge anzeigen (Anzahl: 1)
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i:Integer;
begin
for i := 0 to ListView1.Items.Count - 1 do
begin
  DeleteFile(ListView1.Items.???);
end;
end;
hab ein bisschen umgeformt...
Doch wie kann ich jetzt die Files löschen?
Wenn ich ja, DeleteFile(ListView1.Items[i]) geht es ja nicht, da Inkomplatible Typen ListItem und String...
Wie mache ich das jetzt?

Neuer Screenie im Anhang

dahead 19. Feb 2006 13:06

Re: FileDeleter Problem
 
Du listest doch bestimmte Dateien in deiner Listview auf, oder? Bevor du die Dateien dort auflistest, solltest du dir die Namen bspw. in einer TStringList merken.

Wenn jetzt der Benutzer eine Datei aus deiner Listview auswählt und löschen will, suchst du (bspw. via ID) in deiner TStringList nach der entspr. Datei und löschst diese (DeleteFile(StringList1[ID]);. Anschließend solltest du natürlich die Datei aus der Stringliste und aus der Listview entfernen.

Falls du das nicht willst, kannst du ja das Verzeichnis aus der Column "Pfad" lesen und den Dateinamen aus der Column "Filename" und das ganze zusammenstückeln. Besser finde ich jedoch obige Variante.

Zum Befehl DeleteFile hast du ja schon einige Links genannt bekommen.

100nF 19. Feb 2006 13:31

Re: FileDeleter Problem
 
probier mal das:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i:Integer;
begin
  for i := 0 to ListView1.Items.Count - 1 do
  begin
    DeleteFile(ListView1.Items.item[i].subitems[1]);
  end;
end;

PierreB 19. Feb 2006 13:33

Re: FileDeleter Problem
 
Nur ne kleine Anregung zu deinem Programm: Vielleicht solltest du vorsichtshalber noch ne Sicherheitsabfrage einbauen ob die Dateien wirklich gelöscht werden sollen einbauen, sonst könnte es zu bösen Überraschungen kommen. ;)

ichbins 19. Feb 2006 13:50

Re: FileDeleter Problem
 
du musst eben den Pfad von dem Item rausfinden und den Dateinamen und die beiden zusammenfügen und dann löschen.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i:Integer;
begin
  for i := 0 to ListView1.Items.Count - 1 do
  begin
    DeleteFile(ListView1.Items.item[i].caption (oder hieß die Eigenschaft TEXT?)+listview1.items.item[i].subitems[itemnummervondemitemmitdempfad].caption);
  end;
end;

mOzZzI 19. Feb 2006 15:50

Re: FileDeleter Problem
 
Egal, wie ich es mache, es klappt überhaupt nicht :wall:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i:Integer;
begin
for i := 0 to ListView1.Items.Count - 1 do
begin
DeleteFile(ListView1.Items.item[i].caption+listview1.items.item[i].subitems[??].caption); ) //ich hab ja keine subitems, ich habe Columns, bei mir ist der "PfadColumn" 2, aber das funzt nicht...
end;
end;
Please Help, ich weiß nicht mehr weiter... :(

dahead 19. Feb 2006 15:58

Re: FileDeleter Problem
 
Du hast sehrwohl subitems. Du füllst deine Columns mit Text ja schließlich auch durch SubItems.Add. Ich nehme an, du hast außerdem den Backslash vergessen. Lass dir halt mal eine Meldung (ShowMessage) über den von dir generierten Dateinamen anzeigen. Dann siehst du ob es ein korrekter Dateiname ist, oder nicht.

Allerdings wie weiter oben geschrieben, würde ich persönlich so nicht vorgehen.

mOzZzI 19. Feb 2006 17:24

Re: FileDeleter Problem
 
@ dahead
Wie würdest du vorgehen?
Mit der Stringlist?
Wie mache ich die?
sry, aber davon hab ich kA
Gruß Philipp

100nF 19. Feb 2006 19:54

Re: FileDeleter Problem
 
hast du schon meinen code probiert?
ich würde meinen, dieser müsste funktionieren.

hier ist er nochmal:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i:Integer;
begin
  for i := 0 to ListView1.Items.Count - 1 do
  begin
    DeleteFile(ListView1.Items.item[i].subitems[1]);
  end;
end;
oder:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i:Integer;
begin
  for i := 0 to ListView1.Items.Count - 1 do
  begin
    DeleteFile(ListView1.Items.item[i].subitems[1]+Listview1.items.item[i].caption);
  end;
end;

Matze 19. Feb 2006 19:58

Re: FileDeleter Problem
 
Zitat:

DeleteFile(ListView1.Items.???);
Delphi-Quellcode:
ListView1.Items[i].Caption
müsste es sein, das wäre der Inhalt der ersten Spalte. Die weiteren bekommst du über subitems.


Edit: Ups, Seite 2 übersehen :oops:

mOzZzI 19. Feb 2006 20:10

Re: FileDeleter Problem
 
Sehr vielen Dank an dich urbanbruhin!!
So hats funktioniert...

Delphi-Quellcode:
DeleteFile(ListView1.Items.Item[i].subitems[1]);
Noch eine Frage:

Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
begin
if if (MessageDlg('Please wait for a while when erasing selected/all data of the files.'+#13+#10+'Once they are deleted, they are never recovered.'+#13+#10+'Are you sure to delete them?', mtWarning, [mbYes, mbNo], 0) = mrYes) then
begin DeleteFile(ListView1.Selected.subitems[1]);
showmessage('File Deleted!');
ListView1.DeleteSelected; end
else //not
end;
Ausdruckstypmuss BOOLEAN sein, aber wo denn?

Zacherl 19. Feb 2006 20:19

Re: FileDeleter Problem
 
Delphi-Quellcode:
procedure TForm1.Button3Click(Sender: TObject);
begin
  if (MessageDlg('Please wait for a while when erasing selected/all data of the files.'
               + #13+#10 
               + 'Once they are deleted, they are never recovered.'
               + #13+#10 
               + 'Are you sure to delete them?', mtWarning, [mbYes, mbNo], 0) = mrYes) then
  begin
    DeleteFile(ListView1.Selected.subitems[1]);
    showmessage('File Deleted!');
    ListView1.DeleteSelected;
  end
    else //not
  begin
 
  end.
end;
Ohne das 2. if sollte es gehen.

Florian

mOzZzI 19. Feb 2006 20:20

Re: FileDeleter Problem
 
upps, hab ich gar net gesehen :shock:

Van HelF 19. Feb 2006 21:17

Re: FileDeleter Problem
 
oder mit ner listbox:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var i:Integer;
begin
for i := 0 to ListBox1.Items.Count - 1 do
begin
  DeleteFile(ListBox1.Items.strings[i]); <- lugg da
end;
end;

Luckie 19. Feb 2006 21:51

Re: FileDeleter Problem
 
Christianb hat es auf der ersten Seite gesagt:
Zitat:

Zitat von Christian Seehase
DeleteFile ist eine Funktion, die Dir true oder false zurückliefert, je nachdem, ob das Löschen nun erfolgreich war oder nicht.
Frag' doch mal mit

Delphi-Quellcode:
ShowMessage(SysErrorMessage(GetLastError));
was schiefgegangen ist, wenn das Löschen fehlschlägt.

Warum wird dieser wertvolle Tipp auch in allen weiteren Code-Beispielen, die in diesem Thread gefolgt sind, absolut irgnoriert als wenn es Quatsch wäre den Rückgabewert zu prüfen? :roll: Und ihr seit dann diejenigen, die über Windows schimpfen, weil das Programm, was gar nicht von Microsoft ist, keine gescheite Fehlerbehandlung besitzt. Aber selber mal im eigenen Programm eine Fehlerbehandlung zu integrieren, die den Benutzer eventuell drauf hinweißt, dass die Datei, die er löschen will, gar nicht existiert oder dass er nicht die nötigen Rechte hat sie zu löschen, wiel sie ihm zum Beispiel nicht gehört, das wird dann auch nicht gemacht. :?

Die meisten Fehler im Code lassen sich sehr einfach beheben, wenn man sich einfach mal die Fehlermeldung von Windows ausgeben läßt. Und auch wenn man damit nicht direkt den Fehler findet, hat man meistens einen Anhaltspunkt was da schiefläuft. Und man hat gleichzeitig eine Meldung für den Benutzer, wenn eben ein Fehler aufgetreten ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:07 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz