Hallo, das folgende Script soll eine Datei nach einer Bestimmten Zeile durchsuchen, und anbieten diese Zeile zu bearbeiten. Dies funktioniert alles soweit, nur soll eine zweite .tmp Datei erstellt werden in der die Änderungen vorgenommen werden, dann die originale Datei gelöscht, und die die .tmp umbenannt werden ohne .tmp.
Die .tmp Datei wird richtig erstellt aber das FileDelete funktioniert nicht. Rückgabewert ist 1 (Erfolgreich), aber die Datei wird erst gelöscht nachdem das Script beendet wird. Ich habe keine Idee wieso.
Grüße
[autoit]#include <GUIConstantsEx.au3>
#include <EditConstants.au3>
Opt('MustDeclareVars', 1)
Opt('GUIOnEventMode', 1)
#region $Vars
Local $hGUI
Local $hMenu
Local $hMenu_Exit
Local $hMenu_Help
Local $hMenu_About
Local $hButton_PickFile
Local $sInput_PickFile
Local $hButton_SaveFile
Local $sInput_SaveFile
Local $hLabel_Id
Local $sLabel_Id
Local $sInput_Newline
Local $msg
Global $iId = 308
#endregion $Vars
$hGUI = GUICreate("EditFile", 335, 220)
$hMenu = GUICtrlCreateMenu("File")
$hMenu_Exit = GUICtrlCreateMenuItem("Exit", $hMenu)
$hMenu_Help = GUICtrlCreateMenu("?")
$hMenu_About = GUICtrlCreateMenuItem("About", $hMenu_Help)
$hButton_PickFile = GUICtrlCreateButton("Pick file", 10, 10, 80, 20)
$sInput_PickFile = GUICtrlCreateInput("", 95, 10, 230, 20, $ES_READONLY)
$hButton_SaveFile = GUICtrlCreateButton("Save file", 10, 35, 80, 20)
$hLabel_Id = GUICtrlCreateLabel("Kennziffer:", 10, 60, 60, 20)
$sLabel_Id = GUICtrlCreateLabel($iId, 70, 60, 60, 20)
$sInput_Newline = GUICtrlCreateEdit("", 10, 80, 315, 110)
GUISetState() ; will display an dialog box with 2 button
GUISetOnEvent($GUI_EVENT_CLOSE, "_Exit", $hGUI)
GUICtrlSetOnEvent($hButton_PickFile, "_FileRead")
GUICtrlSetOnEvent($hButton_SaveFile, "_FileSave")
; Run the GUI until the dialog is closed
While 1
Sleep(100)
WEnd
Func _FileRead()
Local $hPickedFile
Local $hFile
Local $sLine
$hPickedFile = FileOpenDialog("", @FavoritesDir & "", "All (*.txt)")
GUICtrlSetData($sInput_PickFile, $hPickedFile)
$hFile = FileOpen($hPickedFile)
While 1
$sLine = FileReadLine($hFile)
If @error = -1 Then ExitLoop
If StringLeft($sLine, 3) = $iId Then GUICtrlSetData($sInput_Newline, StringMid($sLine, StringLen($iId)+1, StringLen($sLine)))
WEnd
EndFunc
Func _FileSave()
;Original Datei öffnen
Local $hOfile = FileOpen(GUICtrlRead($sInput_PickFile), 0)
If $hOfile = -1 Then
MsgBox(0, "Fehler", "Datei konnte nicht geöffnet werden." & " Bitte überprüfen Sie, ob die Datei bereits genutzt wird.")
Return 0
EndIf
;Tmp Datei erstellen/öffnen
Local $hTmpfile = FileOpen(GUICtrlRead($sInput_PickFile) & ".tmp", 2)
If $hTmpfile = -1 Then
MsgBox(0, "Fehler", "Temporäre Datei konnte nicht angelegt werden.")
Return 0
EndIf
While 1
Local $sLine = FileReadLine($hOfile)
If @error = -1 Then ExitLoop
If StringLeft($sLine, 3) = $iId Then
FileWriteLine($hTmpfile, $iId & GUICtrlRead($sInput_Newline))
Else
FileWriteLine($hTmpfile, $sLine)
EndIf
WEnd
FileClose($hOfile)
FileClose($hTmpfile)
MsgBox(0,"1",FileDelete(GUICtrlRead($sInput_PickFile)))
;~ MsgBox(0,"2",FileMove(GUICtrlRead($sInput_PickFile) & ".tmp", GUICtrlRead($sInput_PickFile), 1))
EndFunc
Func _Exit()
Exit
EndFunc