Seite 1 von 1

ftp-download mit unterverzeichnissen die 2.

Verfasst: 14.05.2013 12:45
von texti
hallo,

ich hatte vor ein paar tagen eine frage, wie ich per ftp ein verzeichnis incl. unterverzeichnissen und dateien zwecks backup laden kann. da ich durch den anstehen herrentag etwas verpeilt war, mußte ich teile von diesem thema löschen. hier nun meine lösung und die frage an alle, ob und wie das zu verbessern/optimieren wäre. die trennung von verzeichnis- und dateien-download ist bewußt gemacht worden, damit die prozeduren flexibler in mögliche neue projekte übernommen werden können.

Code: Alles auswählen


Global FontID1
FontID1 = LoadFont(1, "Arial", 14)


Global dateizaehler=0
Global dirzaehler=0
Global diranzahl=0
Global savedir$="c:\tempbackup"
Global copybyte.l=0
Global gesamtbyte.l=0
Global Dim verzeichnis$(500)
startFTPdir$="/"


Procedure.s FormatByteSize(n.q)
  Protected s.s=Str(n)
  Protected len=Len(s)
  Protected ret.s
  For i=0 To len-1
    If i And Not i%3 :: ret="."+ret :: EndIf
    ret= Mid(s,len-i,1) +ret
  Next
  ProcedureReturn ret
EndProcedure


Procedure getFTPfiles(pfad$)
  Ergebnis = SetFTPDirectory(0, pfad$)
  LokalPfad$=savedir$+ReplaceString(pfad$,"/","\")
  Ergebnis = CreateDirectory(LokalPfad$)
  If ExamineFTPDirectory(0)
    While NextFTPDirectoryEntry(0)
      If FTPDirectoryEntryType(0)=#PB_FTP_File
        datei$=FTPDirectoryEntryName(0)
        dateizaehler+1
        Ergebnis=ReceiveFTPFile(0, datei$, LokalPfad$+datei$,1)
        Repeat
          Delay(100)
          Ereignis = WindowEvent()
          If FTPProgress(0)>1
            SetGadgetText(1,"Lade Dateien :   "+FormatByteSize(FTPProgress(0)+copybyte)+" - "+Str(dateizaehler))
            SetGadgetState   (3, FTPProgress(0)+copybyte)
          EndIf
        Until FTPProgress(0) = -3 Or FTPProgress(0) = -2
        copybyte=copybyte+FTPDirectoryEntrySize(0)
      EndIf
    Wend
  EndIf
EndProcedure


Procedure getFTPdirs(pfad$)
  Ergebnis = SetFTPDirectory(0, pfad$)
  If ExamineFTPDirectory(0)
    While NextFTPDirectoryEntry(0)
      If FTPDirectoryEntryType(0)=#PB_FTP_Directory
        verz$=FTPDirectoryEntryName(0)
        If verz$<>".." And verz$<>"."
          diranzahl+1
          Ereignis = WindowEvent()
          SetGadgetText(1,"Analysiere Verzeichnis :   "+Str(diranzahl))
          verzeichnis$(diranzahl)=pfad$+verz$+"/"
        EndIf
      EndIf
      If FTPDirectoryEntryType(0)=#PB_FTP_File
        gesamtbyte=gesamtbyte+FTPDirectoryEntrySize(0)
        SetGadgetText(2,"Gesamt-Bytes :  "+FormatByteSize(gesamtbyte))
      EndIf
    Wend
    If dirzaehler<diranzahl
      dirzaehler+1
      getFTPdirs(verzeichnis$(dirzaehler))
    EndIf
  EndIf
EndProcedure






Ergebnis = DeleteDirectory(savedir$,"",#PB_FileSystem_Recursive)
Ergebnis = CreateDirectory(savedir$)


OpenWindow(0,0,0,600,280,"Backup V1.02",#PB_Window_ScreenCentered|#PB_Window_SystemMenu) 
  TextGadget(1, 50, 30, 500, 30, "Backup wird gestartet . . .", #PB_Text_Center)
  SetGadgetFont(1, FontID1)
  TextGadget(2, 50, 70, 500, 30, "Backup wird gestartet . . .", #PB_Text_Center)
  SetGadgetFont(2, FontID1)
  
  
InitNetwork()
  
;hier die ftp-daten eingeben
If OpenFTP(0, "test", "test", "test")
  verzeichnis$(diranzahl)=startFTPdir$
  getFTPdirs(startFTPdir$)
  ProgressBarGadget(3,  50, 120, 500,  10, 0, gesamtbyte)
  For x=0 To diranzahl
    getFTPfiles(verzeichnis$(x))
  Next
  CloseFTP(0)
EndIf



MessageRequester("Ende","Programm normal beendet")

danke für eure mühe und entschuldigt bitte nochmal den aussetzer.

gruß