Entwickler-Ecke
Grafische Benutzeroberflächen (VCL & FireMonkey) - ListBox FTP Inhalt löschen
Dude566 - Mo 20.04.09 18:44
Titel: ListBox FTP Inhalt löschen
Hallo erstmal,
ich habe einen kleinen FTP Manager gecodet, und würde jetzt gerne eine Funktion einbauen die den Umgang erleichtern soll.
In einer ListBox lasse ich mit
Delphi-Quelltext
1:
| IdFTP.List(ListBox.Items); |
den Inhalt des aktuellen Verzeichnisses anzeigen.
Jetzt möchte ich das wenn der Benutzer ein Item wie eine Textdatei in der ListBox anklickt, und danach einen Button drückt, z.B. Löschen, das die Datei dann auch vom Server gelöscht wird.
Kann man das irgendwie machen,.... mit Itemdindex kann ich doch zumindest die Position herausfinden oder?
Achja gelöscht werden die Dateien wie folgt:
Delphi-Quelltext
1:
| IdFTP.RemoveDir(EditLoeschen.Text); |
Gruß Dude566
Xentar - Mo 20.04.09 19:32
Müsste sowas in der Art sein.
Delphi-Quelltext
1:
| ListBox.Items.Delete(ListBox.Itemindex); |
Dude566 - Mo 20.04.09 21:13
Damit löscht man ja aber nur den Inhalt aus der Listbox oder täusche ich mich?
Es soll ja die Datei dann auch vom Server gelöscht werden.
Also so irgendwie:
Delphi-Quelltext
1:
| IdFTP.RemoveDir(ListBox.ItemIndex); |
???
Andreas L. - Mo 20.04.09 21:44
Delphi-Quelltext
1:
| IdFTP.RemoveDir(ListBox.Items[ListBox.ItemIndex]); |
Dude566 - Di 21.04.09 16:54
Das blöde ist nur, das in der ListBox nicht nur der Dateiname angezeigt wird sondern auch Datum und Rechte.
siehe Anhang
Wie kann ich machen das er nur den Namen bekommt, auf diese Weise ja scheinbar nicht.
jakobwenzel - Di 21.04.09 17:12
Wenn du den Namen nicht nochmal in ner extra Liste gespeichert hast wirst du ihn wohl oder übel aus dem String rauspulen müssen. :roll:
Du solltest doch eigentlich wissen ob du die Liste nochmal extra hast. :wink:
Dude566 - Di 21.04.09 17:19
Ich habe ja keine extra Liste weil ich auch nicht weis wie ich den Dateinamen wie du sagst
"rauspulen" kann.
Einen Vorschlag?
jakobwenzel - Di 21.04.09 17:28
Der einzige Doppelpunkt der in dem ganzen Ding vorkomt is der bei der Uhrzeit.
Mit Pos(':',s) findest du seine position im String. 4 dazu und du bist beim ersten Zeichen vom Dateinamen.
Rauskopieren kannst du ihn jetz mit Copy(s,Anfang,Länge), länge ist dabei length(s)-anfang.
Dude566 - Di 21.04.09 23:21
Klappt alles prima, vielen Dank!
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure TForm1.loeschenClick(Sender: TObject); var loeschdatei : string; position : integer; begin if idFTP1.Connected then begin loeschdatei := ListBox1.Items[ListBox1.ItemIndex]; position := Pos(':',loeschdatei)+4; loeschdatei := Copy(loeschdatei,position,Length(loeschdatei)-position+1); IdFTP1.Delete(loeschdatei); actdir; end else ShowMessage ('Es besteht keine Verbindung.'); end; |
Andreas L. - Mi 22.04.09 09:51
Mehrere Angaben in einer Listbox? Ist das nicht ziemlich unübersichtlich? Ich würde die Dateien in einer ListView ausgeben lassen.
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| with ListView1.Items.Add do begin Caption := 'dateiname'; SubItems.Add('erstellungsdatum'); ... ImageIndex := 1; end; |
Dude566 - Mi 22.04.09 18:58
Ich weis aber nur wie ich den aktuellen Serverinhalt in einer ListBox anzeigen kann.
So wie du es geschrieben hast kann ich das ja nicht einfach übernehmen da ich ja keine Dateinamen bekomme.
Wenn dann müsste ich die ListBox auf invisible stellen, und nur die Dateinamen herauskopieren und im ListView anzeigen.
Oder wie denkst du darüber?
FinnO - Mi 22.04.09 19:50
du kannst den Namen ja aus dem String den du in die Listbox packst rauspulen und dann im Listview anzeigen.
jakobwenzel - Mi 22.04.09 20:04
Naja, eleganter wäre es, die Daten vor dem zusammenschmeißen zu nehmen, denn ich glaub kaum dass die idFTP die nicht einzeln hat.
Dude566, zeig mal ein bisschen Eigeninitiative! Dein PC explodiert nicht, wenn du was falsch machst, auf jeden Fall solltest du dabei was lernen können. Du allein weißt wie dein Programm bisher aufgebaut ist. Wenn du gezeigt kriegst wie du einen Eintrag mit festem Text hinzufügst solltest du es doch schaffen da ne Schleife zu nehmen und die Einträge dynamisch zu füllen!
Dude566 - Mi 22.04.09 22:42
Ja ich suche ja auch schon nach einer Methode die Dateien einzeln zu erhalten, doch mit Google und der Delphi Hilfe habe ich bisher nichts gefunden.
Weis auch nicht wirklich genau nach was ich im einzelnen suchen muss.
Dude566 - Mi 22.04.09 22:55
Der Begriff "directorylisting" ist mir z.B. unbekannt, aber danke ich werde mich dort mal einlesen. ;)
Dude566 - Do 23.04.09 18:48
Ich hab da nochmal ein Problem, ich weiß ja das ich den String nach einem "/" durchsuchen kann aber...
Ich habe einen Pfad wie diesen hier: /sachen/test/uploads/meins
Und ich möchte eine zurück Funktion einbauen also das letzte Verzeichnis von dem String abschnippeln. Wie finde ich denn da die Position heraus?
jaenicke - Do 23.04.09 18:49
Das geht mit ExtractFilePath(ExcludeTrailingPathDelimiter(...)), da der letzte Teil dann als Dateiname interpretiert wird. ;-)
Am Ergebnis hängt mit ExtractFilePath nen / dran, wenn du das nicht willst, nimm ExtractFileDir.
// EDIT:
Nein, doch nicht, wegen den / statt \ als Trennzeichen, dann musst du es eben selbst machen:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7:
| var EndPos: Integer; begin EndPos := Length(APath); while (EndPos >= 1) and (AValue[EndPos] <> '/') do Dec(EndPos); ANewPath := Copy(APath, 1, EndPos); |
So sollte in ANewPath der Oberordner mit / am Ende liegen.
Dude566 - Do 23.04.09 18:56
Danke da wäre ich nie drauf gekommen, da fehlt mir noch das praktische Denken. :oops:
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!