Lieber Besucher, herzlich willkommen bei: AutoIt.de - Das deutsche AutoIt-Forum. Falls dies dein erster Besuch auf dieser Seite ist, lies bitte die Hilfe durch. Dort wird dir die Bedienung dieser Seite näher erläutert. Darüber hinaus solltest du dich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutze das Registrierungsformular, um dich zu registrieren oder informiere dich ausführlich über den Registrierungsvorgang. Falls du dich bereits zu einem früheren Zeitpunkt registriert hast, kannst du dich hier anmelden.

Benutzerinformationen überspringen
Registrierungsdatum: 10. Juni 2009
Wohnort: Nachrodt-Wiblingwerde
Beruf: Azubi -> Fachkraft für Lagerlogistik

Benutzerinformationen überspringen
Registrierungsdatum: 10. Juni 2009
Wohnort: Nachrodt-Wiblingwerde
Beruf: Azubi -> Fachkraft für Lagerlogistik
|
|
AutoIt-Quellcode |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
#include <Array.au3> #include <FTP_Ex.au3> $serv = "xxx" $user = "xxx" $pass = "xxx" $open = _FTPOpen("TEST") $Conn = _FTPConnect($open,$serv,$user,$pass,1) $folders=_FTPFilesListToArray($Conn,1) _ArrayDisplay($folders) ;Folderwalk for $i=3 to $folders[0] ;Bei meinem ftp server sind die ersten 2 Ordner unsichtbar und unlöschbar deswegen fang ich bei 3 an _FTPSetCurrentDir($Conn, $folders[$i]) $Files=_FTPFilesListToArray($Conn,2) _ArrayDisplay($Files) Next |
Spoiler
![]()
AutoIt-Quellcode
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 #include<Misc.au3> #include<GUIConstantsEx.au3> $server = "home.******.dk" $user = "*****************" $password = "**************" ; !!!!!!!!!!!!!!!!!! ; Datei 1 hoch laden ProgressOn("Upload","Uploading file [Cancel with F8]") $x = _FTP_Upload( $server, $user, $password, 'public_html/testdatei.jpg' , 'E:\testdatei.jpg') ; !!!!!!!!!!!!!!!!!! ProgressSet(100,"Return: " & $x & @CRLF & "Error: " & @error) Sleep(2000) ProgressOff() ; Datei 2 hoch laden ProgressOn("Upload","Uploading file [Cancel with F8]") $x = _FTP_Upload( $server, $user, $password, 'public_html/testdatei2.jpg' , 'E:\testdatei2.jpg') ; !!!!!!!!!!!!!!!!!! ProgressSet(100,"Return: " & $x & @CRLF & "Error: " & @error) Sleep(2000) ProgressOff() Func _UpdateParts($percent) ProgressSet($percent,$percent &"%") If _IsPressed("77") Then Return 0 ;~ Switch GUIGetMsg() ;~ Case $GUI_EVENT_CLOSE ;~ Return -1 ; In Upload einn Abbruch einbauen, der negative Werte als Return angibt :) dann im Haupt-Programm testen. ;~ Case $Cancel ;~ Return 0 ; bei 0 Abbruch ;~ EndSwitch Return 1 ; bei 1 Fortsetzten Endfunc Func _FTP_Upload( $server, $user, $password, $file,$FileLocal ,$FunctionToCall="") #Region connect Local $aiWinInetDLL = DllOpen("wininet.dll"), $ai_InternetCloseHandle,$parts Local $ai_InternetOpen = DllCall($aiWinInetDLL, 'long', 'InternetOpen', 'str', 'PicTransfer', 'long', 1, 'str', '', 'str', '', 'long', 0) If @error Or $ai_InternetOpen[0] = 0 Then DllClose($aiWinInetDLL) SetError(-1) Return 0 EndIf Local $i_ServerPort = 0, $l_Service = 1, $l_Context = 0, $l_InternetSession = $ai_InternetOpen[0] Local $ai_InternetConnect = DllCall($aiWinInetDLL , 'long', 'InternetConnect', 'long', $l_InternetSession, 'str', $server, 'int', $i_ServerPort, 'str', $user, 'str', $password, 'long', $l_Service, 'long', 0x08000000, 'long', $l_Context) If @error Or $ai_InternetConnect[0] = 0 Then $ai_InternetCloseHandle = DllCall($aiWinInetDLL , 'int', 'InternetCloseHandle', 'long', $ai_InternetOpen[0]) DllClose($aiWinInetDLL) SetError(-2) Return 0 EndIf Local $ai_ftpopenfile = DllCall( $aiWinInetDLL , 'long', 'FtpOpenFile', 'long', $ai_InternetConnect[0], 'str', $file, 'dword', 0x40000000, 'dword', 0x02, 'dword', 0 ) If @error Or $ai_ftpopenfile[0] = 0 Then $ai_InternetCloseHandle = DllCall($aiWinInetDLL , 'int', 'InternetCloseHandle', 'long', $ai_InternetConnect[0]) $ai_InternetCloseHandle = DllCall($aiWinInetDLL , 'int', 'InternetCloseHandle', 'long', $ai_InternetOpen[0]) DllClose($aiWinInetDLL) SetError(-3) Return 0 EndIf #EndRegion #Region DataSend Local $fhandle = FileOpen($FileLocal,16) ;~ $buffer = FileRead( $fhandle ) $glen = FileGetSize($FileLocal) $last = Mod($glen,100) $x = ($glen-$last)/100 ;~ If $x = 0 Then $x = 1 If $x = 0 Then $x = $last $parts = 1 ElseIf $last > 0 Then $parts = 101 Else $parts = 100 EndIf $buffer = DllStructCreate("byte[" & $x & "]") Dim $out, $i = 0, $result For $i = 1 To $parts Select Case $i = 101 And $last > 0 $x = $last EndSelect DllStructSetData($buffer,1,FileRead($fhandle,$x)) Local $ai_ftpwrite = DllCall( $aiWinInetDLL , 'int', 'InternetWriteFile', 'long', $ai_ftpopenfile[0], 'ptr', DllStructGetPtr($buffer), 'int', $x, 'dword*', $out ) $result += $ai_ftpwrite[4] If @error Or $ai_ftpwrite[0] = 0 Then $ai_InternetCloseHandle = DllCall($aiWinInetDLL , 'int', 'InternetCloseHandle', 'long', $ai_ftpopenfile[0]) $ai_InternetCloseHandle = DllCall($aiWinInetDLL , 'int', 'InternetCloseHandle', 'long', $ai_InternetConnect[0]) $ai_InternetCloseHandle = DllCall($aiWinInetDLL , 'int', 'InternetCloseHandle', 'long', $ai_InternetOpen[0]) FileClose($fhandle) DllClose($aiWinInetDLL) SetError(-4) Return 0 EndIf Switch $FunctionToCall Case "" ToolTip( $i ) Case Else $Ret = Call($FunctionToCall,$i) Select Case $Ret <= 0 $ai_InternetCloseHandle = DllCall($aiWinInetDLL , 'int', 'InternetCloseHandle', 'long', $ai_ftpopenfile[0]) DllCall($aiWinInetDLL, 'int', 'FtpDeleteFile', 'long', $ai_InternetConnect[0], 'str', $file) $ai_InternetCloseHandle = DllCall($aiWinInetDLL , 'int', 'InternetCloseHandle', 'long', $ai_InternetConnect[0]) $ai_InternetCloseHandle = DllCall($aiWinInetDLL , 'int', 'InternetCloseHandle', 'long', $ai_InternetOpen[0]) FileClose($fhandle) DllClose($aiWinInetDLL) SetError(-6) Return $Ret EndSelect EndSwitch Sleep( 20 ) Next FileClose($fhandle) #EndRegion #region disconnect $ai_InternetCloseHandle = DllCall($aiWinInetDLL , 'int', 'InternetCloseHandle', 'long', $ai_ftpopenfile[0]) $ai_InternetCloseHandle = DllCall($aiWinInetDLL , 'int', 'InternetCloseHandle', 'long', $ai_InternetConnect[0]) $ai_InternetCloseHandle = DllCall($aiWinInetDLL , 'int', 'InternetCloseHandle', 'long', $ai_InternetOpen[0]) If @error Or $ai_InternetCloseHandle[0] = 0 Then DllClose($aiWinInetDLL) SetError(-5) Return 0 EndIf #EndRegion DllClose($aiWinInetDLL) Return 1 EndFunc
setze mal den 3. Parameter der FileList-Funktion auf $INTERNET_FLAG_RELOAD = 0x80000000![]()
![]()
AutoIt-Quellcode
1 2 $INTERNET_FLAG_RELOAD = 0x80000000 $array = _FTPFilesListTo2DArray($FTPServer,0, $INTERNET_FLAG_RELOAD)

Ich habe ein Problem mit der Funktion _FTPDelFile.
Wenn die Datei auf dem FTP 0 Byte groß ist, dann wird die Datei nicht gelöscht. Dateien die größer als 0 Byte sind, werden ganz normal gelöscht.
Kann mir jemand weiterhelfen? Die Funktion "FtpDeleteFile" die über die UDF aufgerufen wird, hat nur 2 Parameter und keine Flags mit denen man was erreichen könnte.

Da kann man nichts machen. Auch die Windows-Funktion hat keine weiteren Parameter. Als Workaround kannst du ja eine 1byte große Datei mit dem gleichen Namen hochladen und anschließend löschen![]()
|
|
Quellcode |
1 2 3 4 5 6 |
$downloading_file_max = $filelist[0]
For $i = 1 to $downloading_file_max
Local $filesize = _FTPGetFileSize($connection, $settings_ftp_path & $filelist[$i])
ConsoleWriteError("filesize" & $i & ": " & $filesize & @CR)
Next
|

Spoiler
![]()
AutoIt-Quellcode
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 ;=============================================================================== ; ; Function Name: _FTPGetFileSize() ; Description: Gets filesize of a file on the FTP server. ; Parameter(s): $l_FTPSession - The Long from _FTPConnect() ; $s_FileName - The file name. ; Requirement(s): DllCall, wininet.dll ; Return Value(s): On Success - 1 ; On Failure - 0 ; Author(s): J.o.a.c.h.i.m. d.e. K.o.n.i.n.g. ; Modified: Prog@ndy ; ;=============================================================================== Func _FTPGetFileSize($l_FTPSession, $s_FileName) Local $ai_FTPGetSizeHandle = DllCall($GLOBAL_FTP_WININETHANDLE, 'ptr', 'FtpOpenFile', 'ptr', $l_FTPSession, 'str', $s_FileName, 'long', 0x80000000, 'long', 0x04000002, 'long', 0) If @error Or $ai_FTPGetSizeHandle[0] = 0 Then Return SetError(1,0,-1) Local $ai_FTPGetFileSize = DllCall($GLOBAL_FTP_WININETHANDLE, 'dword', 'FtpGetFileSize', 'long', $ai_FTPGetSizeHandle[0], 'dword*', 0) If @error Then DllCall($GLOBAL_FTP_WININETHANDLE, 'int', 'InternetCloseHandle', 'ptr', $ai_FTPGetSizeHandle[0]) Return SetError(2,0,-1) EndIf DllCall($GLOBAL_FTP_WININETHANDLE, 'int', 'InternetCloseHandle', 'ptr', $ai_FTPGetSizeHandle[0]) ;~ Return $ai_FTPGetFileSize[0] Return BitOR(BitShift($ai_FTPGetFileSize[2], -32), BitAND($ai_FTPGetFileSize[0], 0xFFFFFFFF)) EndFunc ;==>_FTPGetFileSize

failed!
evtl meinst du die FTP_ex.au3 aber die hat auch nur fehler und ist kacke gebaut, massig undecleared vars sowie
consts diei verändert werden(failed)

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »progandy« (10. Januar 2010, 14:47)
