![]() |
ftp komplettes verzeichniss mit subdirs und files löschen
hi leute..brauche mal eure hilfe ..wie kann ich von einem ftp server komplette verzeichnisse löschen mit subdirs und allem drum und dran ..ich hab den indy ftp verwendet aber komme hinten und vorne nicht weiter ...weil immer neue subdirs in den main dirs auftauchen...dann habe ich das hier gefunden:
aber damit bekomme ich nichtmal eine ftp verbindung zustande, zudem findet er getfolderpath nicht ...hab alles durchsucht und hier in der source lib ist leider auch kein bsp..wer kann mir da weiter helfen ? danke euch !
Delphi-Quellcode:
procedure DeleteFolderRecursive(hFTP: HINTERNET; Path: String);
var hSearch: HINTERNET; findData: WIN32_FIND_DATA; TempList: TStringList; i: Integer; begin TempList := TStringList.Create; try hSearch := FtpFindFirstFile(hFTP,PChar(GetFolderPath(Path)),findData,0,0); repeat if findData.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY then begin if not FtpRemoveDirectory(hFTP, PChar(GetFolderPath(Path))) then begin TempList.Add(Path + findData.cFileName + '\'); end; end else begin if not FtpDeleteFile(hFTP, PChar(GetFolderPath(Path) + findData.cFileName)) then Main_Extras.ErrorPrint('Could not delete File ' + Path + findData.cFileName + '.', 'FTP File Delete Error'); end; until not InternetFindNextFile(hSearch,@findData); InternetCloseHandle(hSearch); for i:=0 to TempList.Count-1 do begin DeleteFolderRecursive(hFTP, TempList[i]); if not FtpRemoveDirectory(hFTP, PChar(GetFolderPath(TempList[i]))) then Main_Extras.ErrorPrint('Could not delete Folder ' + TempList[i] + '.', 'FTP Folder Delete Error'); end; finally TempList.Free; end; end; |
Re: ftp komplettes verzeichniss mit subdirs und files lösche
indy und das was du gepostet hast passt gar nicht zusammen, das sind total verschiedene Dinge.
Um mit Indy Verzeichnisse zu löschen wo noch was drin ist musst du wie bei Windows auch die Verzeichnisse rekursiv durchlaufen und die Dateien daraus löschen. Und das du mit obigem Code keine Verbindung zu stande bekommst ist auch klar weil der Teil darin gar nicht enthalten ist. |
Re: ftp komplettes verzeichniss mit subdirs und files lösche
ja, ich weiss das das 2 paar schuhe sind ...ich habe es mit indy versucht und damit...kannst du mir mit indy ein code beispiel geben wie man das macht ? das wäre echt nett ich sitze hier schon eine ewigkeit dran ..oder vll für die code lib hier direkt dort posten ..danke dir !
|
Re: ftp komplettes verzeichniss mit subdirs und files lösche
Hi agm,
haste mal ![]() Unter anderem steht da drin: Verzeichnis wechseln IdFTP1.ChangeDir(DirName); und Aktuellen Server-Verzeichnisinhalt in Listbox anzeigen IdFTP1.List(DirectoryListBox.Items); Der Parameter ist ein Objekt vom Typ TStrings. Dieses Objekt wird als Ausgabeziel verwendet. Zwei weitere Parameter sind optional: eine Filtermaske für Dateinamen (Standard ist '', also alle Dateien), und ein Boolean-Wert, ob zu den Dateinamen auch Details (Dateigröße, Datum, Zugriffsrechte) angezeigt werden sollen (Standard ist true). und Vom Server löschen IdFTP1.RemoveDir(Name); //löscht ein Verzeichnis IdFTP1.Delete(Name); //löscht eine Datei Der Parameter ist der Name des zu löschenden Unterverzeichnisses bzw. der zu löschenden Datei. Vielleicht hilft dir das weiter. greetz Lun |
Re: ftp komplettes verzeichniss mit subdirs und files lösche
ja genau so habe ich auch angefangen aber wenn jetzt in einem dir, weitere dirs auftauchen..dann brauchste wieder ne listbox für die neuen dirs usw ! das ist ein fass ohne boden..
Delphi-Quellcode:
if frmmain.mainftp.Connected = true then
begin frmmain.memo1.Lines.Add('FTP Status: Connected'); frmmain.memo1.Lines.Add('FTP Status: ' + frmmain.mainftp.RetrieveCurrentDir); //change to user dir frmmain.mainFTP.ChangeDir(ftpDir); frmmain.memo1.Lines.Add('FTP Status: ' + frmmain.mainftp.RetrieveCurrentDir); //frmmain.mainftp.List(frmmain.listbox.Items ,'',false); // //change to delDir dir frmmain.mainFTP.ChangeDir(delDir); frmmain.memo1.Lines.Add('FTP Status: ' + frmmain.mainftp.RetrieveCurrentDir); frmmain.mainftp.List(frmmain.lstdirs.Items ,'',false); // for I := 0 to frmmain.lstdirs.Count - 1 do begin frmmain.mainFTP.ChangeDir(frmmain.lstdirs.Items[i]); frmmain.memo1.Lines.Add('FTP Status: ' + frmmain.mainftp.RetrieveCurrentDir); frmmain.mainftp.List(frmmain.lstfiles.Items ,'',false); // frmmain.mainftp.ChangeDirUp; //sldirs.Add(frmmain.ListBox.Items[i]); end; |
Re: ftp komplettes verzeichniss mit subdirs und files lösche
fass ohne boden?
mach's doch einfach rekursiv... |
Re: ftp komplettes verzeichniss mit subdirs und files lösche
ja dann sag mir bitte wie ..ich weiss es nicht ..danke dir !
|
Re: ftp komplettes verzeichniss mit subdirs und files lösche
*push*
|
Re: ftp komplettes verzeichniss mit subdirs und files lösche
Setzt dich doch mal selber hin und versuch das mal hinzubekommen. Du hast ja selber schon eine rekursive Lösung gepostet, jetzt versuch das doch mal mit den Indys umzusetzen.
|
Re: ftp komplettes verzeichniss mit subdirs und files lösche
Hi agm,
du brauchst hier eine Rekrusive Funktion. Vielleicht hilft Dir das weiter die folgende Prozedur zeigt dir wie du lokal auf deinem Rechner alle Dateien eines Verzeichnis mit Unterverzeichnissen auflistest. So hast du zumindest schon mal einen Ansatz nachdem Prinzip musst du dann deine Procedure umschreiben. Ich habe die Funktion auch aus dem Netz und habe mir die damals umgeschrieben.
Delphi-Quellcode:
Zum testen machst du ein Projekt mit einem Form, darauf schmeist du einen Button und eine ListBox
//Liefert alle Dateien eines Ordners mit Unterverzeichnissen zurück, die
//Funktion ruft //ScanDir auf durch WithSubDirs Rekrusiv procedure TForm1.GetFilesInDirectory(Directory: String; const Mask: String; List: TStrings; WithSubDirs, ClearList: Boolean); //ScanDir ist eine Rekrusive Funktion und ruft sich solange auf bis kein //Verzeichniss oder eine Datei mehr vorhanden sind. procedure ScanDir(const Directory: String); var Datei: TSearchRec; begin if FindFirst(Directory + Mask, faAnyFile - faDirectory, Datei) = 0 then try repeat List.Add(Datei.Name); //jede Datei wird hier bei einem Durchlauf angesprochen (sprich hier musst du deine Operation einfügen) until FindNext(Datei) <> 0; finally FindClose(Datei); end; if WithSubDirs then begin if FindFirst(Directory + '*.*', faAnyFile, Datei) = 0 then try repeat if ((Datei.attr and faDirectory) = faDirectory) and (Datei.Name <> '.') and (Datei.Name <> '..') then ScanDir(Directory + Datei.Name + '\'); until FindNext(Datei) <> 0; finally FindClose(Datei); end; end; end; begin List.BeginUpdate; try if ClearList then List.Clear; if Directory = '' then Exit; if Directory[Length(Directory)] <> '\' then Directory := Directory + '\'; ScanDir(Directory); finally List.EndUpdate; end; end; im OnClick vom Button rufst du die Methode wie folgt auf: GetFilesInDirectory('C:\testordner', '*.*', Listbox1.Items, True, True); Der dritte Parameter macht die Funktion Rekrusiv in dem Du WithSubDir auf True setzt. Springt die Funktion ScanDir (if WithSubDirs then begin) hierrein und ruft sich neu auf. Das ganze funktioniert zwar noch nicht so wie du das möchtest mit indy und dem ftpServer. Aber so hast du schon mal ne Richtung wie du das Problem angehen musst. greetz Lun |
Re: ftp komplettes verzeichniss mit subdirs und files lösche
die lösung habe ich hier aus dem forum...die ist zum teil von dir bzw du hast geholfen sie zu machen..hey luckie ich hab das gestern bis zum erbrechen versucht und nichtmal den anfang hinbekommen ...könnte da echt deine hilfe gebrauchen...wie ich anfange ..also mit den indys wäre schonmal gut ..danke dir
|
Re: ftp komplettes verzeichniss mit subdirs und files lösche
hey lun, danke erstmal ..ich werde das jetzt damit versuchen ...wenn ich nicht mehr weiter komme, melde ich mich ! danke vielmals
|
Re: ftp komplettes verzeichniss mit subdirs und files lösche
ich verstehe nicht ganz wie ich jetzt meinen ftp code und diese such funktion zusammen bringe ich kann ja nicht auf dem ftp nach den files suchen ohne die ftp funktionen oder ?
Delphi-Quellcode:
if mainftp.Connected <> true then
begin mainftp.Connect; end else begin // result := false; exit; end; if mainftp.Connected = true then begin memo1.Lines.Add('FTP Status: Connected'); memo1.Lines.Add('FTP Status: ' + mainftp.RetrieveCurrentDir); //change to user dir mainFTP.ChangeDir(ftpDir); memo1.Lines.Add('FTP Status: ' + mainftp.RetrieveCurrentDir); //frmmain.mainftp.List(frmmain.listbox.Items ,'',false); // //change to delDir dir mainFTP.ChangeDir('1128'); memo1.Lines.Add('FTP Status: ' + mainftp.RetrieveCurrentDir); mainftp.List(listbox1.Items ,'',false); // end; |
Re: ftp komplettes verzeichniss mit subdirs und files lösche
Genau. Du musst eben die entsprechenden FTP-Methoden der Indys nehmen.
Und bitte editier deine Postings und mach nicht alle fünf Minuten ein neues Posting. |
Re: ftp komplettes verzeichniss mit subdirs und files lösche
hey ich kriege das nicht hin , könnt ihr mir helfen ? bei dem ersten block zum beispiel...das wäre echt nett ! danke euch
|
Re: ftp komplettes verzeichniss mit subdirs und files lösche
Dann zeig doch mal, was du bisher hast.
|
Re: ftp komplettes verzeichniss mit subdirs und files lösche
ich hab den "GetFilesInDirectory" code und meinen ftp source ...und der ftp client (indy) der hat ja nur methoden wie zum beispiel
RetrieveCurrentDir ich weiss nicht wie ich das in verbindung setze.. |
Re: ftp komplettes verzeichniss mit subdirs und files lösche
Hallo,
du könntest wahlweise auch die WinINet Komponenten probieren, dort gibt es eine Funktion FTPFindFirst, welche ähnlich mit der lokalen FindFirst Funktion arbeitet. Ansonsten versuche einfach mal so vorzugehen: Verwende, wie schon mehrmals angesprochen, rekursive Aufrufe. Lege dir vorher zwei Listen an, eine für die Verzeichnisse und eine für die Dateien. Lies jetzt alle Dateien des ersten Verzeichnisses ein und schreibe jedes Unterverzeichnis in die Liste Verzeichnisse und jede Datei in die Liste Dateien. Lösche danach alle Dateien aus der Liste Dateien und wechsle auf das nächste Verzeichnis (aus der Liste Verzeichnisse). Hier beginnst du wieder das ganze Spiel, solange, bis keine weiteren Dateien bzw. Verzeichnisse mehr vorhanden sind. mfg Herbert |
Re: ftp komplettes verzeichniss mit subdirs und files lösche
ja genau sowas habe ich auch gemacht. (also noch nicht löschen nur mal alles anzeigen) aber da bekomme ich dann probleme mit den subdirs weil in der liste ja alle main dirs stehen.
Delphi-Quellcode:
if frmmain.mainftp.Connected = true then
begin frmmain.memo1.Lines.Add('FTP Status: Connected'); frmmain.memo1.Lines.Add('FTP Status: ' + frmmain.mainftp.RetrieveCurrentDir); //change to user dir frmmain.mainFTP.ChangeDir(ftpDir); frmmain.memo1.Lines.Add('FTP Status: ' + frmmain.mainftp.RetrieveCurrentDir); //frmmain.mainftp.List(frmmain.listbox.Items ,'',false); // //change to delDir dir frmmain.mainFTP.ChangeDir(delDir); frmmain.memo1.Lines.Add('FTP Status: ' + frmmain.mainftp.RetrieveCurrentDir); frmmain.mainftp.List(frmmain.lstdirs.Items ,'',false); // for I := 0 to frmmain.lstdirs.Count - 1 do begin frmmain.mainFTP.ChangeDir(frmmain.lstdirs.Items[i]); frmmain.memo1.Lines.Add('FTP Status: ' + frmmain.mainftp.RetrieveCurrentDir); frmmain.mainftp.List(frmmain.lstfiles.Items ,'',false); // frmmain.mainftp.ChangeDirUp; end; end; |
Re: ftp komplettes verzeichniss mit subdirs und files lösche
okay also ich denke mal ihr wollt nicht mehr..?
|
Re: ftp komplettes verzeichniss mit subdirs und files lösche
tag 3 und leider alles ohne erfolg...wer erbarmt sich denn mal... ? ;)
|
Re: ftp komplettes verzeichniss mit subdirs und files lösche
Dann zeig doch endlich mal, was du bisher mit den Indys zustande gebracht hast. Letzendlich musst du nur den rekursiven Code aus deinem ersten Posting für die Indys anpassen.
|
Re: ftp komplettes verzeichniss mit subdirs und files lösche
das ist ja das problem ich habe es nichtmal ansatzweise geschaft den ersten source mit den indys zu kreuzen ..dabei brauche ich ja hilfe..danke dir luckie das du hier nochmal reinschaust
|
Re: ftp komplettes verzeichniss mit subdirs und files lösche
Hallo,
falls du es noch immer nicht hinbekommen haben solltest. Ich brauchte heute auch die Möglichkeit, alle Dateien eines FTP-Verzeichnisses incl. Unterverzeichnisse aufzulisten. Hier hast du die umgeschriebene Prozedur:
Delphi-Quellcode:
Das war nun wirklich nicht schwer. Du musst der Prozedur eine FTP-Instanz übergeben. Was noch wichtig ist, vorher bitte folgendes fest einstellen: FTPCon.UseMLIS := True;
procedure FindAllFilesFTP(FTPCon: TIdFTP; Directory: String; FileList,DirList: TStrings; WithSubDirs, ClearList: Boolean);
procedure ScanDir(const Directory,SubDir: String; WithDir: Boolean); var i: Integer; begin FTPCon.ChangeDir(Directory + SubDir); FTPCon.List; for i := 2 to FTPCon.DirectoryListing.Count-1 do if FTPCon.DirectoryListing.Items[i].ItemType = ditFile then begin if WithDir then FileList.Add(SubDir + FTPCon.DirectoryListing.Items[i].FileName) else FileList.Add(FTPCon.DirectoryListing.Items[i].FileName); end else if FTPCon.DirectoryListing.Items[i].ItemType = ditDirectory then DirList.Add(SubDir + FTPCon.DirectoryListing.Items[i].FileName + '/'); if WithSubDirs then begin for i := 2 to FTPCon.DirectoryListing.Count-1 do if FTPCon.DirectoryListing.Items[i].ItemType = ditDirectory then ScanDir(Directory + SubDir,FTPCon.DirectoryListing.Items[i].FileName + '/',True); end; end; begin if not FTPCon.Connected then Exit; FileList.BeginUpdate; DirList.BeginUpdate; try if ClearList then begin FileList.Clear; DirList.Clear; end; if Directory = '' then Exit; if Directory[Length(Directory)] <> '/' then Directory := Directory + '/'; ScanDir(Directory,'',False); finally DirList.EndUpdate; FileList.EndUpdate; end; end; Und in die uses der Unit "IdAllFTPListParsers" eintragen. WICHTIG: Ist für Indy 10 geschrieben!!! Viel Spaß damit. Grüße ddcool |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz