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
#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)
;~ 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()
;~ 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
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
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
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
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