ftp-download mit unterverzeichnissen die 2.
Verfasst: 14.05.2013 12:45
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.
danke für eure mühe und entschuldigt bitte nochmal den aussetzer.
gruß
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")
gruß