Du bist nicht angemeldet.

Kontrollzentrum

Spenden

Jeder Euro hilft uns, euch zu helfen.

Adsense

Downloads

Stabil: 3.3.8.1 (Q, H)
Stabil: 3.3.12.0 (Q, H)
Beta: 3.3.11.5 (Q, H)
SciTE: 4/5/2014 (Q, H)
Hilfe Deutsch: 12/23/2013 (Q)
Download: OrganizeIncludes (Q)
Stand: 02.06.2014 - 2:21 Uhr

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.

progandy

Bot-Killer

  • »progandy« ist der Autor dieses Themas

Registrierungsdatum: 7. August 2007

Beruf: Informatik-Student

  • Private Nachricht senden

1

Samstag, 7. Juni 2008, 19:12

Erweiterte FTP-Funktionen - FTP.au3 / FTP_Ex.au3

Diese UDFs sind eine Sammlung von Funktionen zur Arbeit mit FTP - Servern.
Seit AutoIt v3.3.2.0 ist diese UDF in abgewandelter Form als FTPEx.au3 enthalten.

Aus diesem Thread: [ gelöst ] FTPUpload per InternetWriteFile hat sich eine erweiterte FTP.au3 entwickelt. Ich nenne sie mal FTP_Ex.au3 :)
Sie basiert auf der More_FTP.au3
und bringt eine neue Funktion _FTP_UploadProgress() mit.
_FTP_UploadProgress() wurde von limette für TextDateien geschrieben und von mir auf beliebige Dateien angepasst

Beispiel

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
#include <Misc.au3>
#include "FTP_Ex.au3"

$serv = "ftp.site.de"
$user = "user"
$pass = "passwort"

$FTP = _FTPOpen("AutoIt v3")
$FTPServer = _FTPConnect($FTP,$serv,$user,$pass,1)

ProgressOn("Upload","Uploading file [Cancel with F8]")
$x = _FTP_UploadProgress($FTPServer, "D:\Dokumente\Dateien von Andreas\Eigene Bilder\1.jpg", 'testdatei.jpg', "_UpdateParts")
ProgressSet(100,"Return: " & $x & @CRLF & "Error: " & @error)
Sleep(2000)
ProgressOff()

_FTPClose($FTPServer)
_FTPClose($FTP)

Func _UpdateParts($percent)
ProgressSet($percent,$percent &"%")
If _IsPressed("77") Then Return 0
Return 1 ; bei 1 Fortsetzten
Endfunc

Beschreibung

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
;===============================================================================
;
; Function Name:   _FTP_UploadProgress()
; Description::    Uploadsd a file in Binary Mode and shows Progress in Tooltip or by Calling a User defined Function
; Parameter(s):     $l_FTPSession    - The Long from _FTPConnect()
;                   $s_LocalFile     - The local file.
;                   $s_RemoteFile      - The remote Location for the file.
;                   $FunctionToCall - [Optional] A function which can update a Progressbar and 
;                                       react on UserInput like Click on Abort or Close App.
;                                       (More info in the end of this comment)
; Requirement(s):  ??
; Return Value(s): Success: 1
;                  Error: 0 and @error:
;                           -3 -> Create File failed
;                           -4 -> Write to file failed
;                           -5 -> Close File failed
;                  Upload aborted by PercentageFunc:
;                   ReturnValue: Return of Called Function
;                           And @error -6
; Author(s):       limette, Prog@ndy
;
; Information about $FunctionToCall:
;   Parameter: $Percentage - The Percentage of Progress
;   Return Values: Continue Download - 1
;                  Abort Download    - 0 Or negative
;                       These Return Values are returned by _FTP_UploadProgress, too, 
;                       so you can react on different Actions like Aborting by User, closing App or TimeOut of whatever
;   Examples: 
;~                   Func _UpdateProgress($Percentage)
;~                      ProgressSet($percent,$percent &"%")
;~                      If _IsPressed("77") Then Return 0 ; Abort on F8
;~                      Return 1 ; bei 1 Fortsetzten
;~                   Endfunc
;
;~                   Func _UpdateProgress($Percentage)
;~                      GUICtrlSetData($ProgressBarCtrl,$percent)
;~                      Switch GUIGetMsg()
;~                         Case $GUI_EVENT_CLOSE
;~                            Return -1 ; _FTP_UploadProgress Aborts with -1, so you can exit you app afterwards
;~                        Case $Btn_Cancel
;~                           Return 0 ; Just Cancel, without special Return value
;~                      EndSwitch
;~                      Return 1 ; Otherwise contine Upload
;~                   Endfunc
;
;===============================================================================
;

_FTP_DownloadProgress

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
;===============================================================================
;
; Function Name:   _FTP_DownloadProgress()
; Description::    Downloads a file in Binary Mode and shows Progress in Tooltip or by Calling a User defined Function
; Parameter(s):     $l_FTPSession    - The Long from _FTPConnect()
;                   $s_LocalFile     - The local file to create.
;                   $s_RemoteFile      - The remote source file.
;                   $FunctionToCall - [Optional] A function which can update a Progressbar and
;                                       react on UserInput like Click on Abort or Close App.
;                                       (More info in the end of this comment)
; Requirement(s):  ??
; Return Value(s): Success: 1
;                  Error: 0 and @error:
;                           -1 -> Local file couldn't be created
;                           -3 -> Open RemoteFile failed
;                           -4 -> Read from Remotefile failed
;                           -5 -> Close RemoteFile failed
;                  Download aborted by PercentageFunc:
;                    ReturnValue: Return of Called Function
;                           And @error -6
; Author(s):       limette, Prog@ndy
;
; Information about $FunctionToCall:
;   Parameter: $Percentage - The Percentage of Progress
;   Return Values: Continue Download - 1
;                  Abort Download    - 0 Or negative
;                       These Return Values are returned by _FTP_DownloadProgress, too,
;                       so you can react on different Actions like Aborting by User, closing App or TimeOut of whatever
;   Examples:
;~                   Func _UpdateProgress($Percentage)
;~                      ProgressSet($percent,$percent &"%")
;~                      If _IsPressed("77") Then Return 0 ; Abort on F8
;~                      Return 1 ; bei 1 Fortsetzten
;~                   Endfunc
;
;~                   Func _UpdateProgress($Percentage)
;~                      GUICtrlSetData($ProgressBarCtrl,$percent)
;~                      Switch GUIGetMsg()
;~                         Case $GUI_EVENT_CLOSE
;~                            Return -1 ; _FTP_UploadProgress Aborts with -1, so you can exit you app afterwards
;~                        Case $Btn_Cancel
;~                           Return 0 ; Just Cancel, without special Return value
;~                      EndSwitch
;~                      Return 1 ; Otherwise contine Upload
;~                   Endfunc
;
;===============================================================================
;


//Edit: > Das DllOPen ist in dieser FTP.au3 schon fest integriert, wodurch auch die Funktionen (warscheinlich nur messbar) schneller werden sollte
//Edit: > Bugfix in _FTPGetCurrentDir, thxknuddelgrisu (sven)
//Edit: > Bugfix: FTPFileGetSize funktionierte nicht.
......... > Hinzugefügt: _FTP_DownloadProgress
//Edit: _FTPFile funktionen :)
//Edit: _FTPFileListTo2D Array gefixt :)
//Edit: 5.12.08: _FTPFindFile... besser dokumentiert und 2 neue funktionen:
..... _FTPFileSizeLoHi()
..... _FTPFileTimeLoHiToStr()
//Edit: 7.12.08: _FTPGetFile hatte falsche Parameter
........ vergessen Variable nach Copy&Paste zu ändern :(
//Edit: 13.02.09: Ein paar bugs gefixt.
//Edit: 16.02.09: Ein paar bugs gefixt.
//Edit: ein paar Stichworte für die Suche: FTP_Ex, FTPEx, FTP

Seit AutoIt v3.3.2.0 ist diese UDF in abgewandelter Form als FTPEx.au3 enthalten.
(Für die, die es immer nich nicht verstanden haben: Der Download ist nur für ältere AutoIt-Versionen geeignet. Durch die Integration der UDF in das AutoIt-Paket ist dieser Download nicht mehr kompatibel.)

alte Downloads: 391 mal heruntergeladen
»progandy« hat folgende Datei angehängt:
  • FTP_Ex.au3 (55,8 kB - 2 428 mal heruntergeladen - zuletzt: Heute, 00:10)

"Jetzt, wo ich weiß wie es geht, versteh ich auch die Gebrauchsanleitung"
Antworten auf Hilfegesuche per PN werden nicht garantiert.

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


Registrierungsdatum: 16. Februar 2007

Beruf: Student - Informatik

  • Private Nachricht senden

2

Samstag, 7. Juni 2008, 20:00

Zitat

_FTP_UploadProgress() wurde von limette für TextDateien geschrieben


Das hört sich ja an als wäre das Absicht gewesen, dass das nur mit Textdateien läuft ;)
Nett formuliert =)

mfg limette
There are only 10 types of people in the world:
Those who understand binary - and those who don't.

progandy

Bot-Killer

  • »progandy« ist der Autor dieses Themas

Registrierungsdatum: 7. August 2007

Beruf: Informatik-Student

  • Private Nachricht senden

3

Samstag, 7. Juni 2008, 20:03

Man will ja nett sein. :D

"Jetzt, wo ich weiß wie es geht, versteh ich auch die Gebrauchsanleitung"
Antworten auf Hilfegesuche per PN werden nicht garantiert.

progandy

Bot-Killer

  • »progandy« ist der Autor dieses Themas

Registrierungsdatum: 7. August 2007

Beruf: Informatik-Student

  • Private Nachricht senden

4

Mittwoch, 23. Juli 2008, 17:17

Hab jetzt auch für den Download die Progress-Funktion gemacht. Wer will den FTP-Client schreiben :D

"Jetzt, wo ich weiß wie es geht, versteh ich auch die Gebrauchsanleitung"
Antworten auf Hilfegesuche per PN werden nicht garantiert.

Raupi

Drecksack aus Überzeugung

Registrierungsdatum: 30. August 2008

Wohnort: Frankfurt am Main

Beruf: Drecksack

  • Private Nachricht senden

5

Sonntag, 7. Dezember 2008, 17:56

Hi.

Habe da en Problem mi deiner UDF. Wenn ich die benutze bekomme ich folgenden Fehler.

C:\Program Files\AutoIt3\Include\FTP_Ex.au3(1261,32) : WARNING: $File: possibly used before declaration.

Bei der vorherigen Version hatte ich den Fehler nicht.

Edit: Fehler kommt bei deinem Beispielscript von dem Beitrag [ offen ] FTPconnect
MfG Raupi

Meine UDF´S:
WM_Notify per Funktion UDF zum Anzeigen von Hilfetexten und einer Uhr in der Statusbar.Anzeige einer Uhr in der Menüzeile
GIF,JPG und BMP Dateien aus Resource laden.
Array aus Dll-Datei laden UDF zum schreiben und lesen von Array´s in(aus) ein(em) INI-File
LUA Script zum erstellen eines Funktionsheaders.
Tipp: Zum bearbeiten von DLL Dateien kann man den XN Resource Editor benutzen, ist besser als Reshacker

Zitat von »Sokrates«

"Wer weiß, dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß."

Zitat von »Werner Krauß«

Der Witz ist das Erdgeschoss des Humors, die Satire der Erste Stock, die Ironie der Zweite, der Sarkasmus das Mansardenstübchen.

progandy

Bot-Killer

  • »progandy« ist der Autor dieses Themas

Registrierungsdatum: 7. August 2007

Beruf: Informatik-Student

  • Private Nachricht senden

6

Sonntag, 7. Dezember 2008, 17:59

Ja, hatte eine Variable beim umbenennen vergessen :(

"Jetzt, wo ich weiß wie es geht, versteh ich auch die Gebrauchsanleitung"
Antworten auf Hilfegesuche per PN werden nicht garantiert.

Raupi

Drecksack aus Überzeugung

Registrierungsdatum: 30. August 2008

Wohnort: Frankfurt am Main

Beruf: Drecksack

  • Private Nachricht senden

7

Sonntag, 7. Dezember 2008, 18:03

Ja. jetzt gehts wieder :thumbup: . Ist auch eine Super UDF nur mal so nebenbei bemerkt. :thumbup: :thumbsup: Mach weiter so.
MfG Raupi

Meine UDF´S:
WM_Notify per Funktion UDF zum Anzeigen von Hilfetexten und einer Uhr in der Statusbar.Anzeige einer Uhr in der Menüzeile
GIF,JPG und BMP Dateien aus Resource laden.
Array aus Dll-Datei laden UDF zum schreiben und lesen von Array´s in(aus) ein(em) INI-File
LUA Script zum erstellen eines Funktionsheaders.
Tipp: Zum bearbeiten von DLL Dateien kann man den XN Resource Editor benutzen, ist besser als Reshacker

Zitat von »Sokrates«

"Wer weiß, dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß."

Zitat von »Werner Krauß«

Der Witz ist das Erdgeschoss des Humors, die Satire der Erste Stock, die Ironie der Zweite, der Sarkasmus das Mansardenstübchen.

gmmg

User

Registrierungsdatum: 12. Oktober 2007

Beruf: Netzwerkadmin

  • Private Nachricht senden

8

Mittwoch, 22. April 2009, 12:11

hallo zusammen,

suche schon länger eine möglichkeit daten per ftp von einem server zu holen und lokal zu speichern!
da auf diesem server, im verzeichnis xy minütlich daten geschrieben werden, muss dass abholen über eine file liste gesteuert werden!

praktisch über ftp_filelisttoarray!

theoretisch würde ich es so machen --> mit server verbinden --> downloadpfad übergeben --> dateien in array lesen --> dateien, die im array stehen downloaden --> nach erfolgreichem download file vom server löschen!

benutze gerade die ftp.au3 und habe mal folgend angefangen!
bekomme hier aber keine files aufgelistet, sondern nur die msgbox: "Folder Empty", "No Files Found "

  Spoiler 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
#include <Misc.au3>
;#include <FTP_Ex.au3>
#include <array.au3>
#include <FTP.au3>

$server = 'xxxxxxxx'
$username = 'xxxx'
$pass = 'xxxx'


$path = '/Data/www/'

$Open = _FTPOpen('FTP')
$Conn = _FTPConnect($Open, $server, $username, $pass, 1)
MsgBox(0,"",$Conn)
$setdir = _FTPSetCurrentDir($Conn, $path)
MsgBox(0,"",$setdir)

$Dirlist = _FTPFilesListToArray($Conn, 1)
_ArrayDisplay($Dirlist, 'Directorys List')
$Ftpc = _FTPClose($Open)
$Open = _FTPOpen('FTP')
$Conn = _FTPConnect($Open, $server, $username, $pass, 1)
$setdir = _FTPSetCurrentDir($Conn, $path)
$Fileslist = _FTPFilesListToArray($Conn, 2)
_ArrayDisplay($Fileslist, 'Files List')
$Ftpc = _FTPClose($Open)
$Open = _FTPOpen('FTP')
$Conn = _FTPConnect($Open, $server, $username, $pass, 1)
$setdir = _FTPSetCurrentDir($Conn, $path)
$DirFileslist = _FTPFilesListToArray($Conn, 0)
_ArrayDisplay($DirFileslist, 'Directorys & Files List')
$Ftpc = _FTPClose($Open)
Exit




hast einer idee bzw. lösung!

im unteren spoiler habe ich änderungen vorgenommen und bekomme jetzt auch eine verbindung!
der pfad wird aber noch nicht übergeben!

  Spoiler 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
$path = "/Data/www/"

$Open = _FTPOpen('FTP')
$Conn = _FTPConnect($Open, $server, $username, $pass, 0)  ; hab hier aus der 1 eine 0 gemacht
MsgBox(0,"ftp connect",$Conn & @CRLF & "verbindung hergestellt")
$setdir = _FTPSetCurrentDir($Conn, $path)
MsgBox(0,"set dir",$setdir)

$Dirlist = _FTPFilesListToArray($Conn, 1)
_ArrayDisplay($Dirlist, 'Directorys List')
$Ftpc = _FTPClose($Open)
$Open = _FTPOpen('FTP')
$Conn = _FTPConnect($Open, $server, $username, $pass, 1)
$setdir = _FTPSetCurrentDir($Conn, $path)
$Fileslist = _FTPFilesListToArray($Conn, 2)
_ArrayDisplay($Fileslist, 'Files List')
$Ftpc = _FTPClose($Open)
$Open = _FTPOpen('FTP')
$Conn = _FTPConnect($Open, $server, $username, $pass, 1)
$setdir = _FTPSetCurrentDir($Conn, $path)
$DirFileslist = _FTPFilesListToArray($Conn, 0)
_ArrayDisplay($DirFileslist, 'Directorys & Files List')
$Ftpc = _FTPClose($Open)
Exit



danke

gruß gmmg

gmmg

User

Registrierungsdatum: 12. Oktober 2007

Beruf: Netzwerkadmin

  • Private Nachricht senden

9

Mittwoch, 22. April 2009, 12:48

sooo,

bekomme jetzt die verzeichnisse angezeigt!
es lag am passiven ftp mode!

AutoIt-Quellcode

1
2
3
$Open = _FTPOpen('FTP')
$Conn = _FTPConnect($Open, $server, $username, $pass, 0,1,0x08000000)  ; 0x08000000 setzt passiven mode
MsgBox(0,"ftp connect",$Conn & @CRLF & "verbindung hergestellt")


_FTPSetCurrentDir --> funktioniert aber bei _ArrayDisplay werden die ersten 3 buchstaben abgeschnitten! wie kann man dies beheben! etwa in der ftp.au3?
files werden auch nur abgeschnitten aufgelistet!

und wie kann ich denn dann die files aus dem array mit _FTPGetFile zum download ansprechen?

vielleicht so:

AutoIt-Quellcode

1
2
3
4
For $i = 1 To $Fileslist[0]
  MsgBox(0,"files ++++",$Fileslist[$i])
 _FTPGetFile($Conn, $Fileslist[$i], "c:\test" & $Fileslist[$i])
Next

die msgbox gibt mir die einzelnen dateien aus, wie aber schon oben erwähnt fehlt da ein teil des namens!

bitte um hilfe .... :!:

danke

gruß gmmg

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »gmmg« (22. April 2009, 15:00)


progandy

Bot-Killer

  • »progandy« ist der Autor dieses Themas

Registrierungsdatum: 7. August 2007

Beruf: Informatik-Student

  • Private Nachricht senden

10

Mittwoch, 22. April 2009, 15:11

verwendest du jetzt meine UDF? bei mir funktioniert _FTPFilesListToArray jedenfalls.

  Spoiler 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
#include<FTP/FTP_EX.au3>

$server = '...'
$username ='...'
$pass = '...'
$path = '/15/'


$Open = _FTPOpen('AutoIt v3')
$Conn = _FTPConnect($Open, $server, $username, $pass, 1)
MsgBox(0,"",$Conn)
$setdir = _FTPSetCurrentDir($Conn, $path)
$Dirlist = _FTPFilesListToArray($Conn, 1)
_ArrayDisplay($Dirlist, 'Directorys List')

$Dirlist = _FTPFilesListToArray($Conn, 2)
_ArrayDisplay($Dirlist, 'File List')

$Dirlist = _FTPFilesListToArray($Conn, 0)
_ArrayDisplay($Dirlist, 'Complete List')

_FTPClose($Conn)
_FTPClose($Open)

//Edit: der Ordnername ist natürlich nicht in der Liste enthalten, genau so wie bei _FileListToArray in AutoIt

"Jetzt, wo ich weiß wie es geht, versteh ich auch die Gebrauchsanleitung"
Antworten auf Hilfegesuche per PN werden nicht garantiert.

gmmg

User

Registrierungsdatum: 12. Oktober 2007

Beruf: Netzwerkadmin

  • Private Nachricht senden

11

Mittwoch, 22. April 2009, 20:36

hallo und danke für die schnelle antwort!

probiere deine morgen vormittag mal aus!
bekommst du denn die namen der files mit _ArrayDisplay kommplett angezeigt?
in meiner jetzigen version "ftp.au3", hat er ja was vom namen abgeschnitten!

und wie benutze ich denn dann die ftpgetfile? so wie ich das schon versucht habe?

gruß gmmg

progandy

Bot-Killer

  • »progandy« ist der Autor dieses Themas

Registrierungsdatum: 7. August 2007

Beruf: Informatik-Student

  • Private Nachricht senden

12

Mittwoch, 22. April 2009, 20:40

Ich bekomme komplette namen mit meiner Version.
Und _FTPGetFile sollte so funktionieren wie du es geschrieben hast. Wenn du eine Progressbar für die einzelnen Dateien willst, kannst du _FTP_DownloadProgress verwenden.

"Jetzt, wo ich weiß wie es geht, versteh ich auch die Gebrauchsanleitung"
Antworten auf Hilfegesuche per PN werden nicht garantiert.

gmmg

User

Registrierungsdatum: 12. Oktober 2007

Beruf: Netzwerkadmin

  • Private Nachricht senden

13

Donnerstag, 23. April 2009, 09:08

hallo progandy,

bekomme mit deiner version auch die kompletten namen angezeigt!
aber ich muss bei der verbindung, bei passive mode ein true schreiben (siehe quelltext), bei einer 1 hat er zwar die verbindung hergestellt, aber nicht s aufgelistet!

  Spoiler 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
#include <Misc.au3>
#include <FTP_Ex.au3>
#include <array.au3>

$server = 'xxxxxxxxx'
$username = 'xxxxxx'
$pass = 'xxxxxxx'

$path = '/data/www/xxxxxxxxxxx/images/'

$Open = _FTPOpen('AutoIt v3')
$Conn = _FTPConnect($Open, $server, $username, $pass, true)
MsgBox(0,"",$Conn)
$setdir = _FTPSetCurrentDir($Conn, $path)
MsgBox(0,"set dir",$setdir)

;$Dirlist = _FTPFilesListToArray($Conn, 1)
;_ArrayDisplay($Dirlist, 'Directorys List')

$Dirlist = _FTPFilesListToArray($Conn, 2)
_ArrayDisplay($Dirlist, 'File List')

For $i = 1 To $Dirlist[0]

MsgBox(0,"files ++++",$Dirlist[$i])
_FTPGetFile($Conn, $Dirlist[$i], "c:\test" & $Dirlist[$i])

Next

;$Dirlist = _FTPFilesListToArray($Conn, 0)
;_ArrayDisplay($Dirlist, 'Complete List')

_FTPClose($Conn)
_FTPClose($Open)


hab noch folgende anforderungen:
- wie kann ich es machen, dass eine logdatei von den heruntergeladenen dateien geschrieben wird
- dateigröße vor download prüfen und zum file in die logdatei schreiben
hier mal meine lösung,!
wäre schön, wenn er täglich eine neue logdatei erstellen würde!

  Spoiler 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
#include <Misc.au3>
#include <FTP_Ex.au3>
#include <array.au3>


$strLogFilePath = ("c:\test")
$strLogFile = "bbi.log"
$strLogPath = ($strLogFilePath & $strLogFile)

$server = 'xxxxxxxxxxx'
$username = 'xxxxxxxxxxxx'
$pass = 'xxxxxxxxxxxx'

$path = '/data/www/xxxxxxxxxxxxxxxxx/images/'

$Open = _FTPOpen('AutoIt v3')
$Conn = _FTPConnect($Open, $server, $username, $pass, true)
;MsgBox(0,"",$Conn)
$setdir = _FTPSetCurrentDir($Conn, $path)
;MsgBox(0,"set dir",$setdir)

;$Dirlist = _FTPFilesListToArray($Conn, 1)
;_ArrayDisplay($Dirlist, 'Directorys List')

$Dirlist = _FTPFilesListToArray($Conn, 2)
;_ArrayDisplay($Dirlist, 'File List')

For $i = 1 To $Dirlist[0]

;MsgBox(0,"files ++++",$Dirlist[$i])
_FTPGetFile($Conn, $Dirlist[$i], "c:\test" & $Dirlist[$i])
$filesize = _FTPGetFileSize($Conn, $Dirlist[$i])
$filesizekb = ($filesize / 1024)
$fskb = StringLeft($filesizekb, 5)
$file = FileOpen($strLogPath, 1)
FileWrite($file, $Dirlist[$i] & "   -- " & $fskb & " kb" & @CR )
FileClose($file)

Next

;$Dirlist = _FTPFilesListToArray($Conn, 0)
;_ArrayDisplay($Dirlist, 'Complete List')

_FTPClose($Conn)
_FTPClose($Open)


- die dateien nach erfolgreichen download vom ftp server löschen
- wenn keine files zum download vorhanden, soll er auch nichts machen!
- filegröße --> wenn 0 kb, dann fehler ausgeben! (würde ich per smtp lösen)

hast du da einen lösungsansatz?
für andere ist das bestimmt auch interessant :)

danke und grüsse

gmmg

Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von »gmmg« (23. April 2009, 10:17)


gmmg

User

Registrierungsdatum: 12. Oktober 2007

Beruf: Netzwerkadmin

  • Private Nachricht senden

14

Donnerstag, 23. April 2009, 14:30

hallo,
hab einige probleme!

$Dirlist = _FTPFilesListToArray($Conn, 2)
_ArrayDisplay($Dirlist, 'File List')

liefert die folgenden werte obwohl ftp verzeichnis leer ist!

[0]|5
[1]|00072423.dat
[2]|00072437.dat
[3]|00072438.dat
[4]|00072439.dat
[5]|12795251.dat

andere unterverzeichnisse des ftp werden richtig aufgelöst!

Fehler gefunden --> Browsercache gelöscht und schon hat er es wieder richtig angezeigt
wie kann man zukünftig solch ein problem verhindern?

gruß gmmg

Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von »gmmg« (23. April 2009, 15:30)


progandy

Bot-Killer

  • »progandy« ist der Autor dieses Themas

Registrierungsdatum: 7. August 2007

Beruf: Informatik-Student

  • Private Nachricht senden

15

Donnerstag, 23. April 2009, 18:31

Ich weiß nicht, wie man das mit dem browsercache verhindern kann.
Zu deinen Fragen: Mit _NowCalcDate() kannst du jeden Tag das Datum in den DAteinamen mit einbauen.
_FTPFilesListTo2DArray fibt ein 2D-Array mit Dateiname und Dateigröße aus.
_FTPGetFile gibt bei Erfolg 1 zurück. Dann gibt es _FTPDelFile ;)
und den 0-byte-Fehler kannst du ja selbst einbauen ;)

"Jetzt, wo ich weiß wie es geht, versteh ich auch die Gebrauchsanleitung"
Antworten auf Hilfegesuche per PN werden nicht garantiert.

gmmg

User

Registrierungsdatum: 12. Oktober 2007

Beruf: Netzwerkadmin

  • Private Nachricht senden

16

Donnerstag, 23. April 2009, 20:29

supi danke

komme aber erst nächste woche dazu, hab paar tage urlaub!

gruß gmmg

gmmg

User

Registrierungsdatum: 12. Oktober 2007

Beruf: Netzwerkadmin

  • Private Nachricht senden

17

Montag, 27. April 2009, 10:26

so,

hier mal meine geänderte version mit mail benachrichtigung!

  Spoiler 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
140
141
142
143
144
145
146
147
148
149
150
#include <Misc.au3>
#include <FTP_Ex.au3>
#include <array.au3>
#include <Date.au3>

$strLogFilePath = ("c:\test\bbi\logs")
$strLogFile = "bbi_" & _NowDate() & ".log"
$strLogPath = ($strLogFilePath & $strLogFile)

If Not FileExists($strLogFilePath) Then DirCreate ($strLogFilePath)

$server = 'xxxxxxx'
$username = 'xxxxxxx'
$pass = 'xxxxxxxxx'

$path = '/data/www/xxxxxxxxxx/'

$Open = _FTPOpen('AutoIt v3')
$Conn = _FTPConnect($Open, $server, $username, $pass, true)
;MsgBox(0,"",$Conn)
$setdir = _FTPSetCurrentDir($Conn, $path)
;MsgBox(0,"set dir",$setdir)

;$Dirlist = _FTPFilesListToArray($Conn, 1)
;_ArrayDisplay($Dirlist, 'Directorys List')

$Dirlist = _FTPFilesListTo2DArray($Conn, 2)
;MsgBox(0,"files vorhanden?",$Dirlist[0])
;_ArrayDisplay($Dirlist, 'File List')

If $Dirlist = 0 Then 
    MsgBox(0,"", "keine Files vorhanden",1)
    Exit
EndIf

For $i = 1 To $Dirlist[0][0]

;MsgBox(0,"files ++++",$Dirlist[$i][0])

IF $Dirlist[$i][1] = 0 Then             ;prüfung auf fehler
    
    ;MsgBox(0,"ERROR",$Dirlist[$i][1])
    Sendmail()                            ; mail benachrichtigung bei fehler
    $file = FileOpen($strLogPath, 1) 
    FileWrite($file, $Dirlist[$i][0] & "   -- " & $Dirlist[$i][1] & " Byte  --  ERROR" & @CR )
    FileClose($file) ; schließt logfile
Else
    _FTPGetFile($Conn, $Dirlist[$i][0], "c:\test\bbi" & $Dirlist[$i][0]) ; lädt file vom ftp server
    $filesizekb = ($Dirlist[$i][1] / 1024) ; rechnet in kbyte um
    $kilobyte = StringLeft($filesizekb, 5) ; formatiert zahl
    $file = FileOpen($strLogPath, 1) 
    FileWrite($file, $Dirlist[$i][0] & "   -- " & $kilobyte & " kb" & @CR )

    _FTPDelFile($Conn, $Dirlist[$i])  ; löscht file vom ftp server
    
EndIf

Next

FileClose($file) ; schließt logfile

;$Dirlist = _FTPFilesListToArray($Conn, 0)
;_ArrayDisplay($Dirlist, 'Complete List')

_FTPClose($Conn)
_FTPClose($Open)


Func Sendmail()
    
      Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc_1")
      ;##################################
      ; Variables
      ;##################################
      $s_SmtpServer = "10.xxxxxxx"                                  ; address for the smtp-server to use - REQUIRED
      $s_FromName = @UserName                    ; name from who the email was sent
      $s_FromAddress = @UserName&"@xxxx.de" ;  address from where the mail should come
      $s_ToAddress = "xxxx@xxxxx.de"    ; destination address of the email - REQUIRED
      $s_Subject = "FTP BBI Download ERROR"        ; subject from the email - can be anything you want it to be
      $as_Body = "Folgende Datei hat 0 Byte:" & @CR & @CR  & $Dirlist[$i][0]            ; the messagebody from the mail - can be left blank but then you get a blank mail
      $s_AttachFiles = ""         ; the file you want to attach- leave blank if not needed
      $s_CcAddress = " "       ; address for cc - leave blank if not needed
      $s_BccAddress = " "           ; address for bcc - leave blank if not needed
      $s_Username = "xxxx"                    ; username for the account used from where the mail gets sent  - Optional (Needed for eg GMail)
      $s_Password = "xxxxxxx"                  ; password for the account used from where the mail gets sent  - Optional (Needed for eg GMail)
      $IPPort = 25                              ; port used for sending the mail
      $ssl = 0                                  ; enables/disables secure socket layer sending - put to 1 if using httpS
      ;~ $IPPort=465                            ; GMAIL port used for sending the mail
      ;~ $ssl=1                                 ; GMAILenables/disables secure socket layer sending - put to 1 if using httpS

      ;##################################
      ; Script
      ;##################################
      Global $oMyRet[2]
      Global $oMyError = ObjEvent("AutoIt.Error", "MyErrFunc_1")
      $rc = _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject, $as_Body, $s_AttachFiles, $s_CcAddress, $s_BccAddress, $s_Username, $s_Password, $IPPort, $ssl)
      If @error Then
        MsgBox(0, "Error sending message", "Error code:" & @error & "  Description:" & $rc)
      EndIf

EndFunc   ;==>Sendmail

Func _INetSmtpMailCom($s_SmtpServer, $s_FromName, $s_FromAddress, $s_ToAddress, $s_Subject = "", $as_Body = "", $s_AttachFiles = "", $s_CcAddress = "", $s_BccAddress = "", $s_Username = "", $s_Password = "",$IPPort=25, $ssl=0)
    $objEmail = ObjCreate("CDO.Message")
    $objEmail.From = '"' & $s_FromName & '" <' & $s_FromAddress & '>'
    $objEmail.To = $s_ToAddress
    Local $i_Error = 0
    Local $i_Error_desciption = ""
    If $s_CcAddress <> "" Then $objEmail.Cc = $s_CcAddress
    If $s_BccAddress <> "" Then $objEmail.Bcc = $s_BccAddress
    $objEmail.Subject = $s_Subject
    If StringInStr($as_Body,"<") and StringInStr($as_Body,">") Then
        $objEmail.HTMLBody = $as_Body 
    Else
        $objEmail.Textbody = $as_Body & @CRLF
    EndIf
    If $s_AttachFiles <> "" Then
            Local $S_Files2Attach = StringSplit($s_AttachFiles, ";")
            For $x = 1 To $S_Files2Attach[0]
            $S_Files2Attach[$x] = _PathFull ($S_Files2Attach[$x])
        If FileExists($S_Files2Attach[$x]) Then
            $objEmail.AddAttachment ($S_Files2Attach[$x])
        Else
            $i_Error_desciption = $i_Error_desciption & @lf & 'File not found to attach: ' & $S_Files2Attach[$x]
            SetError(1)
            return 0
        EndIf
        Next
    EndIf
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserver") = $s_SmtpServer
    $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = $IPPort
    ;Authenticated SMTP
    If $s_Username <> "" Then
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendusername") = $s_Username
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/sendpassword") = $s_Password
    EndIf
    If $Ssl Then 
        $objEmail.Configuration.Fields.Item ("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
    EndIf
    ;Update settings
        $objEmail.Configuration.Fields.Update
    ; Sent the Message
        $objEmail.Send
        If @error Then 
            SetError(2)
            return $oMyRet[1]
        EndIf
EndFunc ;==>_INetSmtpMailCom



:P

gruß
gmmg

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »gmmg« (27. April 2009, 11:06)


Sayen

User

Registrierungsdatum: 15. Dezember 2008

  • Private Nachricht senden

18

Freitag, 8. Mai 2009, 18:34

Erstmal vielen für die geniale UDF :thumbup:

Nun zu meiner Frage:
Ich verwende in einer Batch Datei den ftp befehl "mget *.log"
So lädt mir FTP alle log Dateien im aktuellen Verzeichnis herunter.

Jetzt möchte ich mit dieser UDF den gesammten Fortschritt anzeigen.

Ich weis aber nicht wie ich es genau machen soll :(

Ich vermute mal das ich es irgendwie mit "_FtpFileListto2DArray()" machen muss, dann den array nach log dateien durchsuchen und die grösse zusammen zählen.

Aber wie mache ich dann weiter...

progandy

Bot-Killer

  • »progandy« ist der Autor dieses Themas

Registrierungsdatum: 7. August 2007

Beruf: Informatik-Student

  • Private Nachricht senden

19

Freitag, 8. Mai 2009, 19:55

Ich würde das in etwa so machen:
zuerst mit _FtpFileListto2DArray die Dateiliste holen
dann in ein neues Array die log-Dateien raussuchen
Nun eine GUI mit 2 progressbars machen. Die erste zeigt die fertig gestellten Dateien an und die zweite den Fortschritt der aktuellen Datei.
Daher zum Downlaod _FTP_DownloadProgress verwenden.

Du kannst statt _FtpFileListto2DArray auch mit _FTPFileFind... - Funktionen wie mit FileFindFirstFile arbeiten ;)
(Tipp: _FTPFileFindFirst($FTPVerbindung, "mget *.log", ...) )
Schau dir dazu an, wie es in der _FtpFileListto2DArray gemacht wird.

"Jetzt, wo ich weiß wie es geht, versteh ich auch die Gebrauchsanleitung"
Antworten auf Hilfegesuche per PN werden nicht garantiert.

Sayen

User

Registrierungsdatum: 15. Dezember 2008

  • Private Nachricht senden

20

Freitag, 8. Mai 2009, 21:30

Ich habe mir was zusammengebastelt.
Komplizierter gehts vermutlich kaum ;(
Leider sieht es komisch aus wenn die Dateien unterschiedlich gross sind.
Die Progressbar macht dann komische Sprünge :wacko:

Werde es morgen wieder in Angriff nehmen.

@progandy deinen Tipp verstehe ich jetzt überhaupt nicht 8|
Könntest du mir genauer sagen wie das funktionert?

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
#include <Array.au3>
#include <FTP_Ex.au3>

$serv = "127.0.0.1"
$user = "ADMIN"
$pass = "admin"

$FTP = _FTPOpen("TEST")
$FTPServer = _FTPConnect($FTP,$serv,$user,$pass,1)
_FtpSetCurrentDir($FTPServer,'logging2')

ProgressOn("Download","Downloading *.log files",'', -1 , @DesktopHeight / 2 - 100)

$file2Darray = _FTPFilesListTo2DArray($FTPServer)

Global $filesizetot=0, $filename[1], $filesize[1], $filecount=0, $filesizeprogress=0

For $i=3 To $file2Darray[0][0]
    If StringInStr($file2Darray[$i][0],'.log')<>0 Then
        $filesizetot+=$file2Darray[$i][1]
        _ArrayAdd($filename,$file2Darray[$i][0])
        _ArrayAdd($filesize,$file2Darray[$i][1])
        $filecount+=1
    EndIf
Next

DirCreate('logging')

For $i=1 To $filecount
    $x=_FTP_DownloadProgress($FTPServer,'logging\' & $filename[$i],$filename[$i],'_updateprogress')
Next
ProgressSet(100)

_FTPClose($FTPServer)
_FTPClose($FTP)

Sleep(2000)
ProgressOff()

Func _updateprogress($percent)
    $filesizeprogress = Round(100 / $filesizetot * ($filesizeprogress + ($filesize[$i] /100 * $percent)) + (100 / $filecount * $i),0) 
    ProgressSet($filesizeprogress, $filename[$i] & ' ' & $percent & '%' )
    Return 1
Endfunc

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Sayen« (8. Mai 2009, 21:40)


autoit.de Webutation