AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi ftp komplettes verzeichniss mit subdirs und files löschen
Thema durchsuchen
Ansicht
Themen-Optionen

ftp komplettes verzeichniss mit subdirs und files löschen

Ein Thema von agm65 · begonnen am 12. Jun 2007 · letzter Beitrag vom 25. Mär 2008
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von agm65
agm65

Registriert seit: 21. Okt 2003
1.194 Beiträge
 
Delphi 2006 Professional
 
#1

ftp komplettes verzeichniss mit subdirs und files löschen

  Alt 12. Jun 2007, 15:32
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;
euer Peter Porka
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#2

Re: ftp komplettes verzeichniss mit subdirs und files lösche

  Alt 12. Jun 2007, 15:49
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.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von agm65
agm65

Registriert seit: 21. Okt 2003
1.194 Beiträge
 
Delphi 2006 Professional
 
#3

Re: ftp komplettes verzeichniss mit subdirs und files lösche

  Alt 12. Jun 2007, 15:55
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 !
euer Peter Porka
  Mit Zitat antworten Zitat
Benutzerbild von Lun
Lun

Registriert seit: 4. Feb 2006
122 Beiträge
 
Delphi 2005 Professional
 
#4

Re: ftp komplettes verzeichniss mit subdirs und files lösche

  Alt 12. Jun 2007, 16:08
Hi agm,

haste mal hier geguckt?

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
  Mit Zitat antworten Zitat
Benutzerbild von agm65
agm65

Registriert seit: 21. Okt 2003
1.194 Beiträge
 
Delphi 2006 Professional
 
#5

Re: ftp komplettes verzeichniss mit subdirs und files lösche

  Alt 12. Jun 2007, 16:13
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;
euer Peter Porka
  Mit Zitat antworten Zitat
bttb930

Registriert seit: 6. Okt 2003
372 Beiträge
 
#6

Re: ftp komplettes verzeichniss mit subdirs und files lösche

  Alt 12. Jun 2007, 16:18
fass ohne boden?

mach's doch einfach rekursiv...
  Mit Zitat antworten Zitat
Benutzerbild von agm65
agm65

Registriert seit: 21. Okt 2003
1.194 Beiträge
 
Delphi 2006 Professional
 
#7

Re: ftp komplettes verzeichniss mit subdirs und files lösche

  Alt 12. Jun 2007, 16:19
ja dann sag mir bitte wie ..ich weiss es nicht ..danke dir !
euer Peter Porka
  Mit Zitat antworten Zitat
Benutzerbild von agm65
agm65

Registriert seit: 21. Okt 2003
1.194 Beiträge
 
Delphi 2006 Professional
 
#8

Re: ftp komplettes verzeichniss mit subdirs und files lösche

  Alt 13. Jun 2007, 09:11
*push*
euer Peter Porka
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

Re: ftp komplettes verzeichniss mit subdirs und files lösche

  Alt 13. Jun 2007, 09:59
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Lun
Lun

Registriert seit: 4. Feb 2006
122 Beiträge
 
Delphi 2005 Professional
 
#10

Re: ftp komplettes verzeichniss mit subdirs und files lösche

  Alt 13. Jun 2007, 10:14
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:
//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;
Zum testen machst du ein Projekt mit einem Form, darauf schmeist du einen Button und eine ListBox

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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:34 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