Filesearch & FTP Upload

  • Folgendes möchte ich realisieren:

    Ich möchte Ein Verzeichnis durchsuchen, den Inhalt der gefundenen Dateien in eine Textdateo schreiben und die per ftp hochladen

    Ich habe folgendes Problem:

    Es funktioniert fast alles nur der Upload nicht, es scheint als ob das filesearch oder der fileopen/filewrite Befehl die Datei nicht freigibt.

    Lade ich alternativ in der ftp Funktion eine andere Datei hoch klappts :( Hier ein paar Auszüge aus dem Script

    Es werden 3 Ordner durchsucht, für diese wird je Suchlauf der Trenner eingefügt, dann die Dateien mit Versionsnummer.

    In der Gui gibts nur 3 Radiobuttons und ein OK Button (FTP / Datei im Browser zeigen / EXIT) das klappt auch :)

    Spoiler anzeigen
    [autoit]


    #include <GuiConstants.au3>
    #include <Array.au3>
    #include <Date.au3>
    #include <FTP.au3>
    ;~ Variablen
    $bin = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\****", "DirEXE") & "\"
    $rpt = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\*****", "DirDruFremd") & "\"
    $exe_ver=FileGetVersion($bin & "winsped.exe", "ProductVersion")
    $day=_DateTimeFormat( _NowCalc(),2)
    $vhodate = StringReplace(_NowCalcDate(), "/", "-")
    $dir=_ArrayCreate(3, "*.*", "ActiveX\*.*", "ActiveX-Dll\*.*")
    $filename="c:\" & @ComputerName & "_" & StringTrimRight($exe_ver,2) & "_" & $vhodate & ".txt"
    ;- MsgBox(0,$rpt,$bin)

    [/autoit] [autoit][/autoit] [autoit]

    ;~ Ablauf
    If FileExists($filename) Then FileDelete($filename)
    For $i = 1 To $dir[0]
    FileOpen($filename,1)
    FileWriteLine($filename, "###################################################################")
    FileWriteLine($filename, $exe_ver & "|" & $dir[$i])
    FileWriteLine($filename, "###################################################################")
    FileClose($filename)
    search_write()
    Next
    gui_auswahl()

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ;~ Funktionen
    Func search_write()
    $search = FileFindFirstFile($bin & $dir[$i])
    If $search = -1 Then
    MsgBox(0, "Fehler --- Programmende", "Auf diesem PC ist kein *** installiert!")
    Exit
    EndIf
    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    $ver = FileGetVersion(StringTrimRight($bin & $dir[$i],3) & $file, "ProductVersion")
    FileOpen($filename,1)
    FileWriteLine($filename, $file & "|" & $ver)
    FileClose($filename)
    WEnd
    FileClose($search)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func gui_auswahl()
    GuiCreate("LIS Komponenten-Info", 332, 185,-1, -1 , BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS))
    $Input_1 = GuiCtrlCreateInput("", 70, 30, 240, 20)
    $Label_1 = GuiCtrlCreateLabel("Info-Nr.:", 20, 35, 50, 20)
    $Radio_1 = GuiCtrlCreateRadio("Datei zum LIS-FTP Server hochladen.", 30, 80, 210, 20)
    GUICtrlSetState ($Radio_1,$GUI_CHECKED)
    $Radio_2 = GuiCtrlCreateRadio("Wo ist die Datei? / man. Emailversand", 30, 100, 210, 20)
    $Radio_3 = GuiCtrlCreateRadio("Ich möchte nur das Programm beenden.", 30, 120, 210, 20)
    $Start = GuiCtrlCreateButton("OK", 260, 100, 50, 50)
    $Group_1 = GuiCtrlCreateGroup("", 20, 60, 225, 95)
    GuiSetState()
    While 1
    $msg = GuiGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case $msg = $Start
    If GUICtrlRead ($Radio_1) = 1 Then ftp()
    If GUICtrlRead ($Radio_2) = 1 Then show_file()
    If GUICtrlRead ($Radio_3) = 1 Then copy();Exit
    Case Else
    EndSelect
    WEnd
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func ftp()
    $localfile='c:\boot.ini';%filename
    $remotefile='/public/' & StringTrimLeft($filename,3)
    msgbox(0,$localfile,$remotefile)
    $server = '1.1.1.1'
    $username = 'user'
    $pass = 'pwd'
    $port = 21
    $dllhandle = DllOpen(@SystemDir & '\wininet.dll');
    $Open = _FTPOpen('myftp',0)
    if @error then
    msgbox(0,"","fail_open")
    endif
    $Conn = _FTPConnect($Open, $server, $username, $pass, $port)
    if @error then
    msgbox(0,"","fail_connect")
    endif
    $Ftpp = _FtpPutFile($Conn, $localfile, $remotefile)
    $Ftpc = _FTPClose($Open)
    DllClose($dllhandle)
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func show_file()
    $sysdrive=DriveGetLabel( "c:\" ) & " (C:)"
    run('explorer /root,"c:\"', @SystemDir)
    WinWait($sysdrive, "")
    If Not WinActive($sysdrive, "") Then WinActivate($sysdrive,"")
    WinWaitActive($sysdrive, "")
    Send(StringTrimLeft($filename,3))
    Exit
    EndFunc
    Func copy()
    FileCopy($filename, "d:\")
    Exit
    EndFunc

    [/autoit]


    Vielleicht hat ja jemand eine Idee, in der FTP Funktion habe ich testweise einmal $localfile geändert.

    Boot Ini wird mit filename kopiert ;( nur die erzeugte packt er nicht an beim FTP

    Filecopy klappt auch, testweise den dritten Radiobutton missbraucht ?(

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

    4 Mal editiert, zuletzt von Dietmar (16. März 2008 um 21:16)

  • Ich kann auch das gesamte Script hier ablegen alerdings ohne FTP Zugangsdaten.

    Die Pfade werden aus der Registry ausgelesen und das Programm wird bei euch nicht vorzufinden sein :)

    Wenn es hilft lade ich es hoch aber eigentlich fehlen nur noch die Includes und die Variablen.

    Edit: Ich habe es oben mal vervollständigt.

    Folgendes klappt:

    Datei erzeugen/benennen ,

    GUI ,

    Upload einer anderen Datei anstelle der generierten (Filecopy mit der generierten klappt)

    Upload der generierten Datei ohne die for Schleife auch möglich, mit vorhandener Datei da die dann ja nicht neu erzeugt wird. :D

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

    3 Mal editiert, zuletzt von Dietmar (16. März 2008 um 10:48)

  • Monolog I / Tag2:Eine Macke habe ich noch gefunden:

    In dem DLL Suchlauf kommt er ins schleudern (dort sind so 800-1000 Dateien zu erwarten :))

    Was könnte man dort machen um es

    a) "performanter"

    b) zuverlässiger zu gestalten

    Er kappt immer so bei ~220 Dateien Der Ordner für die Exe Files fasst so um 300 Dateien und läuft durch. ?(

    Habe schon überlegt mit "rundos" und "dir" die Dateinamen in eine Datei/Variable zu schreiben und die dann abarbeiten zu lassen.

    Irgendwlche Tips Vorschläge Ideen...

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • Probier mal das:

    Sind noch reste von meinem code drin kein bock die rauszumachen ;D

    [autoit]


    $Drive="C:"
    Search($Drive, "hallo.txt")

    [/autoit][autoit][/autoit][autoit]

    Func Search($current, $ext)
    Local $search = FileFindFirstFile($current & "\*.*")
    While 1
    Local $file = FileFindNextFile($search)
    If @error Or StringLen($file) < 1 Then ExitLoop
    If Not StringInStr(FileGetAttrib($current & "\" & $file), "") And ($file <> "." Or $file <> "..") Then
    If StringRight($current & "\" & $file, StringLen($ext)) = $ext Then
    MsgBox(0,"",$current&"\"&$file)
    EndIf
    EndIf
    If StringInStr(FileGetAttrib($current & "\" & $file), "D") And ($file <> "." Or $file <> "..") Then
    Search($current & "\" & $file, $ext)
    EndIf
    WEnd
    EndFunc

    [/autoit][autoit][/autoit][autoit][/autoit]

    Einmal editiert, zuletzt von I3iLLiG (16. März 2008 um 13:55)

  • Hallo danke für deinen Post. :)

    Ich dachte schon, nur ich häte hier Schreibrechte.

    Sehe ich das richtig, das Du zusätzlich die Endung prüfst?

    Die wäre mir eigentlich egal, und 2 Verzeichnisse werden korrekt angezeigt,

    es kommt mir vor als wenn ihm das zuviel wird im 3.Lauf.

    Auf Fileclose hast Du verzichtet nach Writeline kann man das so machen?

    [autoit]

    If StringRight($current & "\" & $file, StringLen($ext)) = $ext Then
    FileOpen("Dateien\Config.ini",2)
    FileWriteLine("Dateien\Config.ini", $current&"\"&$file)
    EndIf

    [/autoit]

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • Also, es gibt 2 Möglichkeiten:
    a) Den Dateinamen angeben (ohne FileOPen / FileClose )
    b) FileOPen und FileClose verwenden und mit dem FileHandle arbeiten.:

    [autoit]

    $dateihandle = FileOpen($filename,1)
    FileWriteLine($dateihandle, $file & "|" & $ver)
    FileClose($dateihandle)

    [/autoit]


    Bei vielen Filewrites ist b) schneller, da die Datei nicht jedes Mal geöffnet und geschlossen wird.

    Zu was anderem. Ich würde weniger globale Variablen verwenden und dafür Funktionsparameter:

    Spoiler anzeigen

    statt

    [autoit]

    Func search_write()
    $search = FileFindFirstFile($bin & $dir[$i])
    ...

    [/autoit]


    das:

    [autoit]

    ;Aufruf:
    search_write($bin & $dir[$i])

    [/autoit] [autoit][/autoit] [autoit]

    ;Funktion:
    Func search_write($suchstring)
    $search = FileFindFirstFile($suchstring)
    ...

    [/autoit]

    //Edit: Show File geht einfacher:

    [autoit]

    Run('explorer.exe /select, "C:\'& $filename &'"'

    [/autoit]

    Einmal editiert, zuletzt von progandy (16. März 2008 um 14:36)

  • So kleiner Zwischestand habe

    Fileopen FileClose entfernt die Anzahl passt und der Upload klappt nun.

    An der Verkürzung bei show file habe ich mich auch schon versucht.

    Run('explorer.exe /select, "C:\'& StringTrimLeft($filename,3) &'"')

    Wie muss ich das maskieren klappt jedenfalls nicht, es soll der Explorer geöffnet werden und die Datei markiert werden.

    $filename beinhaltet ja schon c:\ :huh:


    [autoit]


    ;Aufruf:
    search_write($bin & $dir[$i])
    ;Funktion:
    Func search_write($suchstring)
    $search = FileFindFirstFile($suchstring) ...

    [/autoit]


    wo liegt hier der Vorteil ?

    Spoiler anzeigen
    [autoit]

    #include <GuiConstants.au3>
    #include <Array.au3>
    #include <Date.au3>
    #include <FTP.au3>
    ;~ Variablen
    $bin = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\LIS Wagner & Partner\WinSped\Application", "DirEXE")
    if StringRight($bin, 1) <> "\" Then $bin = $bin & "\"
    $rpt = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\LIS Wagner & Partner\WinSped\Application", "DirDruFremd")
    if StringRight($rpt, 1) <> "\" Then $rpt = $rpt & "\"
    $exe_ver=FileGetVersion($bin & "winsped.exe", "ProductVersion")
    $day=_DateTimeFormat( _NowCalc(),2)
    $vhodate = StringReplace(_NowCalcDate(), "/", "-")
    $dir=_ArrayCreate(3, "*.*", "ActiveX\*.*", "ActiveX-Dll\*.*")
    $filename="c:\" & @ComputerName & "_" & StringTrimRight($exe_ver,2) & "_" & $vhodate & ".txt"
    MsgBox(0,$rpt,$bin)

    [/autoit] [autoit][/autoit] [autoit]

    ;~ Ablauf
    If FileExists($filename) Then FileDelete($filename)
    For $i = 1 To $dir[0]
    FileWriteLine($filename, "###################################################################")
    FileWriteLine($filename, $exe_ver & "|" & $dir[$i])
    FileWriteLine($filename, "###################################################################")
    search_write()
    Next
    search_write_rpt()
    gui_auswahl()
    ;~ Funktionen
    Func search_write()
    $search = FileFindFirstFile($bin & $dir[$i])
    If $search = -1 Then
    MsgBox(0, "Fehler --- Programmende", "Auf diesem PC ist kein Winsped installiert!")
    Exit
    EndIf
    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    $ver = FileGetVersion(StringTrimRight($bin & $dir[$i],3) & $file, "ProductVersion")
    FileWriteLine($filename, $file & "|" & $ver)
    WEnd
    FileClose($search)
    EndFunc
    Func search_write_rpt()
    FileWriteLine($filename, "###################################################################")
    FileWriteLine($filename, @UserName & "|" & $rpt)
    FileWriteLine($filename, "###################################################################")
    $search = FileFindFirstFile($rpt & "*.*")
    If $search = -1 Then
    ;~ MsgBox(0, "Hinweis", "Für diesen Benutzer sind keine Fremdrucke hinterlegt!")
    FileWriteLine($filename, "Für diesen Benutzer sind keine Fremdrucke hinterlegt!")
    EndIf
    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    $ver = FileGetSize($rpt & $file)
    FileWriteLine($filename, $file & "|" & $ver & " Bytes")
    WEnd
    FileClose($search)
    EndFunc
    Func gui_auswahl()
    GuiCreate("LIS Komponenten-Info", 332, 185,-1, -1 , BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS))
    $Input_1 = GuiCtrlCreateInput("", 70, 30, 240, 20)
    $Label_1 = GuiCtrlCreateLabel("Info-Nr.:", 20, 35, 50, 20)
    $Radio_1 = GuiCtrlCreateRadio("Datei zum LIS-FTP Server hochladen.", 30, 80, 210, 20)
    GUICtrlSetState ($Radio_1,$GUI_CHECKED)
    $Radio_2 = GuiCtrlCreateRadio("Wo ist die Datei? / man. Emailversand", 30, 100, 210, 20)
    $Radio_3 = GuiCtrlCreateRadio("Ich möchte nur das Programm beenden.", 30, 120, 210, 20)
    $Start = GuiCtrlCreateButton("OK", 260, 100, 50, 50)
    $Group_1 = GuiCtrlCreateGroup("", 20, 60, 225, 95)
    GuiSetState()
    While 1
    $msg = GuiGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case $msg = $Start
    If GUICtrlRead ($Radio_1) = 1 Then ftp_lis()
    If GUICtrlRead ($Radio_2) = 1 Then show_file()
    If GUICtrlRead ($Radio_3) = 1 Then Exit
    Case Else

    [/autoit] [autoit][/autoit] [autoit]

    EndSelect
    WEnd
    Exit
    EndFunc
    Func ftp_lis()
    $localfile=$filename
    $remotefile='/public/' & StringTrimLeft($filename,3)
    $server = '1.1.1.1'
    $username = 'user'
    $pass = 'pwd'
    $port = 21
    $dllhandle = DllOpen(@SystemDir & '\wininet.dll');
    $Open = _FTPOpen('myftp',0)
    if @error then
    msgbox(0,"","fail_open")
    endif
    $Conn = _FTPConnect($Open, $server, $username, $pass, $port)
    if @error then
    msgbox(0,"","fail_connect")
    endif
    $Ftpp = _FtpPutFile($Conn, $localfile, $remotefile)
    $Ftpc = _FTPClose($Open)
    DllClose($dllhandle)
    Exit
    EndFunc
    Func show_file()
    $sysdrive=DriveGetLabel( "c:\" ) & " (C:)"
    run('explorer /root,"c:\"', @SystemDir)
    WinWait($sysdrive, "")
    If Not WinActive($sysdrive, "") Then WinActivate($sysdrive,"")
    WinWaitActive($sysdrive, "")
    Send(StringTrimLeft($filename,3))
    Exit
    EndFunc

    [/autoit]


    So klappts, sicher nicht schön aber es funktionert.

    Jetzt fehlt nur noch nee Zustandsanzeige und den inputdialog mit in den Filenamen basteln.

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

    2 Mal editiert, zuletzt von Dietmar (16. März 2008 um 21:16)

  • Ah, ja ahb ich übersehen:

    [autoit]

    $filename = "C:\boot.ini"
    Run('explorer.exe /select, "' & $filename &'"')

    [/autoit]

    Die Änderung bei search_write fördert die Übersichtlichkeit :)

  • Thx so funktioniert es

    Habe nun noch die Eingabe einer Kundennummer möglich gemacht

    und per Paramter klappt es auch ohne GUI.

    Das Tüpfelchen wäre jetzt noch so etwas:

    [autoit]

    ProgressOn("Progress Meter", "Increments every second", "0 percent")
    For $i = 1 to 100 step 1
    sleep(100)
    ProgressSet( $i, $i & " percent")
    Next
    ProgressOff()

    [/autoit]

    Aber wie schaffe ich das es quasi parallel funktioniert :D

    Also eine Zustandsanzeige wie weit die Suche ist im GUI Modus.

    Es sind so 1200 Dateien also 12 Dateien 1% aber wie bastelt man das da rein.

    So nun mal Zeit gehabt, es fertigzustellen :)

    Spoiler anzeigen
    [autoit]

    #include <GuiConstants.au3>
    #include <Array.au3>
    #include <Date.au3>
    #include <FTP.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ;~ Variablen
    $bin = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\*****", "DirEXE")
    If StringRight($bin, 1) <> "\" Then $bin = $bin & "\"
    $rpt = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\****", "DirDruFremd")
    If StringRight($rpt, 1) <> "\" Then $rpt = $rpt & "\"
    $exe_ver=FileGetVersion($bin & "winsped.exe", "ProductVersion")
    $day=_DateTimeFormat( _NowCalc(),2)
    $vhodate = StringReplace(_NowCalcDate(), "/", "-")
    $dir=_ArrayCreate(3, "*.*", "ActiveX\*.*", "ActiveX-Dll\*.*")
    $filename="c:\" & @ComputerName & "_" & StringTrimRight($exe_ver,2) & "_" & $vhodate & ".txt"
    $infonr="Bitte keine Sonderzeichen eingeben."
    $filecount=1

    [/autoit] [autoit][/autoit] [autoit]

    ;~ Ablauf
    If FileExists($filename) Then FileDelete($filename)
    If $CmdLine[0] = 0 Then ProgressOn(" LIS Komponenten-Info - Suche...", "Bitte haben Sie etwas Geduld.....", "")
    For $i = 1 To $dir[0]
    FileWriteLine($filename, "###################################################################")
    FileWriteLine($filename, $exe_ver & "|" & $dir[$i])
    FileWriteLine($filename, "###################################################################")
    search_write()
    Next
    search_write_rpt()
    If $CmdLine[0] = 0 Then ProgressOff()
    If $CmdLine[0] > 0 And $CmdLine[1] = "ftp" Then
    $infonr=""
    If $CmdLine[0] > 1 Then $infonr = $CmdLine[2] & "_"
    ftp_lis()
    Else
    gui_auswahl()
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    ;~ Funktionen
    Func search_write()
    $search = FileFindFirstFile($bin & $dir[$i])
    If $search = -1 Then
    MsgBox(0, "Fehler --- Programmende", "Auf diesem PC ist kein Winsped installiert!")
    Exit
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    $ver = FileGetVersion(StringTrimRight($bin & $dir[$i],3) & $file, "ProductVersion")
    FileWriteLine($filename, $file & "|" & $ver)
    progress()
    WEnd
    FileClose($search)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func search_write_rpt()
    FileWriteLine($filename, "###################################################################")
    FileWriteLine($filename, @UserName & "|" & $rpt)
    FileWriteLine($filename, "###################################################################")
    $search = FileFindFirstFile($rpt & "*.*")
    If $search = -1 Then
    FileWriteLine($filename, "Für diesen Benutzer sind keine Fremddrucke hinterlegt!")
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $file = FileFindNextFile($search)
    If @error Then ExitLoop
    $ver = FileGetSize($rpt & $file)
    FileWriteLine($filename, $file & "|" & $ver & " Bytes")
    progress()
    WEnd
    FileClose($search)
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func gui_auswahl()
    GuiCreate("LIS Komponenten-Info", 332, 185,-1, -1 , BitOR($WS_OVERLAPPEDWINDOW, $WS_CLIPSIBLINGS))
    $Input = GuiCtrlCreateInput($infonr, 70, 30, 240, 20)
    $Label = GuiCtrlCreateLabel("Info-Nr.:", 20, 35, 50, 20)
    $Radio_1 = GuiCtrlCreateRadio("Datei zum LIS-FTP Server hochladen.", 30, 80, 210, 20)
    GUICtrlSetState ($Radio_1,$GUI_CHECKED)
    $Radio_2 = GuiCtrlCreateRadio("Wo ist die Datei? / man. Emailversand", 30, 100, 210, 20)
    $Radio_3 = GuiCtrlCreateRadio("Ich möchte das Programm beenden.", 30, 120, 210, 20)
    $Start = GuiCtrlCreateButton("OK", 260, 100, 50, 50)
    $Group = GuiCtrlCreateGroup("", 20, 60, 225, 95)
    GuiSetState()
    While 1
    $msg = GuiGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case $msg = $Start
    If GUICtrlRead($Input) = $infonr Then
    $infonr = ""
    Else
    $infonr = GUICtrlRead($Input) & "_"
    EndIf
    If GUICtrlRead ($Radio_1) = 1 Then ftp_lis()
    If GUICtrlRead ($Radio_2) = 1 Then show_file()
    If GUICtrlRead ($Radio_3) = 1 Then Exit
    Case Else

    [/autoit] [autoit][/autoit] [autoit]

    EndSelect
    WEnd
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func ftp_lis()
    $localfile=$filename
    $remotefile='/Kunden/Komponenten-Check/' & $infonr & StringTrimLeft($filename,3)
    $server = '1.1.1.1'
    $username = 'user'
    $pass = 'pwd'
    $port = 21
    $dllhandle = DllOpen(@SystemDir & '\wininet.dll');
    $Open = _FTPOpen('myftp',0)
    If @error then msgbox(0,"","fail_open")
    $Conn = _FTPConnect($Open, $server, $username, $pass, $port)
    If @error then msgbox(0,"","fail_connect")
    $Ftpp = _FtpPutFile($Conn, $localfile, $remotefile)
    $Ftpc = _FTPClose($Open)
    DllClose($dllhandle)
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func show_file()
    Run('explorer.exe /select, "' & $filename &'"')
    Exit
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    Func progress()
    $filecount = $filecount + 1
    If $CmdLine[0] = 0 Then ProgressSet( $filecount/11 , $filecount & " Dateien gefunden")
    EndFunc

    [/autoit]

    So klappts nun mit Silent Modus / Gui mit Progress / FTP Upload

    Ich befürchte das manchen HardcoreCodern ganz seltsam wird, aber es funktioniert.

    Die Laufzeit hat sich nicht verschlechert, trotz Progress etc was will ich mehr :thumbup:

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

    4 Mal editiert, zuletzt von Dietmar (16. März 2008 um 21:18)

  • Spoiler anzeigen
    [autoit]

    #include<DATE.au3>
    #include<FTP.au3>

    [/autoit] [autoit][/autoit] [autoit]

    $infonr=123
    $exe_ver=12345
    $day=_DateTimeFormat( _NowCalc(),2)
    $vhodate = StringReplace(_NowCalcDate(), "/", "-")
    $filename=@ScriptDir & "\" & @ComputerName & "_" & StringTrimRight($exe_ver,2) & "_" & $vhodate & ".txt" ;funktioniert nicht ???
    ;~ $filename="c:\" & @ComputerName & "_" & StringTrimRight($exe_ver,2) & "_" & $vhodate & ".txt" ;funktioniert
    FileWriteLine($filename, "tetds")
    ftp_lis()
    Func ftp_lis()
    $remotefile='/public/' & $infonr & StringTrimLeft($filename,3)
    $port = 21
    $server = '1.1.1.1'
    $username = 'user'
    $pass = 'pwd'
    $port = 21
    $dllhandle = DllOpen(@SystemDir & '\wininet.dll');
    $Open = _FTPOpen('myftp',0)
    If @error then msgbox(0,"Achtung!","fail_open")
    $Conn = _FTPConnect($Open, $server, $username, $pass, $port)
    If @error then msgbox(0,"","fail_connect")
    $Ftpp = _FtpPutFile($Conn, $filename, $remotefile)
    $Ftpc = _FTPClose($Open)
    DllClose($dllhandle)
    Exit
    EndFunc

    [/autoit]

    Kann mir jemand erklären warum $filname 1. nicht geht das 2. wohl ?

    Verhalten ist bei @scriptdir auch flexibel :D

    Gestartet von c:\ftp_test.au3 wird der "\" mit übergeben bei c:\autoit\ftp_test.au3 nicht

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • Ach nee :)

    Ist mir schon klar, aber aufgerufen von c:\script.au3 kann doch nicht anders sein als c:\autoit\script.au3

    Mal abgesehen von dem Ordner autoit, sehr seltsam.

    In der Msgbox sieht es auch einwandfrei aus (keine Leer und Sonderzeichen) aber auch keine Funktion.... :(

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

  • Ja der Upload klappt nicht mit Scriptdir obwohl der Inhalt der Variable OK aussieht.

    Mir war halt aufgefallen das sich scriptdir unterschiedlich verhält

    wenn man es von root aufruft oder halt aus einen Verzeichnis. Warum klappt der Upload nicht.

    Also folgendes geht File erstellen und Upload "hardcoded mit c:\"

    @scriptdir von c:\ geht auch (File erstellen und Upload) Script geändert

    [autoit]

    & "\"

    [/autoit]

    entfernt

    Nehme ich einen Unterordner auf C:\ bekommt er den Upload anscheinend auch hin aber die Datei heisst dann auf dem lokalen PC autoitp43000_61617_20080320.txt

    Autoit waere eigentlich ein Ordner.

    Wie kann ich testen ob c:\ verfügbar ist, letztens bei einer Anmeldung auf einem

    Kunden-Terminalserver wurde C:\ als L:\ veröffentlicht mit abgespeckter Auswahl :)

    Achtung Anfänger! :whistling:

    Betrachten des Quellcodes auf eigene Gefahr, bei Übelkeit,Erbrechen,Kopfschmerzen übernehme ich keine Haftung. 8o

    4 Mal editiert, zuletzt von Dietmar (20. März 2008 um 23:42)

    • Offizieller Beitrag

    Du könntest aber auch Dein obiges Script benutzen, wenn Du es so änderst:

    [autoit]


    #include<DATE.au3>
    #include<FTP.au3>

    [/autoit][autoit][/autoit][autoit]

    $infonr=123
    $exe_ver=12345
    $day=_DateTimeFormat( _NowCalc(),2)
    $vhodate = StringReplace(_NowCalcDate(), "/", "-")
    $filename=@ScriptDir & StringMid("\", 1 + (StringRight(@ScriptDir, 1) = '\')) & @ComputerName & "_" & StringTrimRight($exe_ver,2) & "_" & $vhodate & ".txt"
    msgbox(0,'',$filename) ; nur zum testen
    ; Rest des Scripts

    [/autoit]

    Dann funktioniert es sowohl im Hauptpfad als auch in einem beliebigen Unterverzeichnis.