Hallo,
würdet ihr mir bitte anhand meinem Skript-Beispiel erklären was ich falsch mache /und/oder wie man eine Text-Datei, welche mit AutoIt in Benutzung ist, bei geöffneter GUI löschen kann?
Hinweis: Das Skript benötigt Adminrechte, also steht ein #RequireAdmin am Anfang des Skriptes.
Zum Schluss schlägt das FileDelete fehl. Auch im Explorer kann ich die Datei nicht löschen.
Hinweis 2: Die Text-Datei löscht sich erst dann von selbst, wenn das Skript beendet wird.
Kann man das irgendwie ändern, sodass sich die Datei auch bei geöffneter GUI überschreiben oder löschen lässt?
AutoIt
#RequireAdmin
#include <AutoItConstants.au3>
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <File.au3>
#include <GUIConstantsEx.au3>
#include <GuiListView.au3>
#include <ListViewConstants.au3>
#include <WindowsConstants.au3>
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
Opt('GUIOnEventMode', 1)
Opt('MustDeclareVars', 1)
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
Global $g_hGUI, $Inputbox1, $dateiwahl, $labeltext, _
$dateibericht, $font
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
$g_hGUI = GUICreate("Test", 820, 300, -1, -1, BitOR($GUI_SS_DEFAULT_GUI, $WS_THICKFRAME))
GUISetBkColor(0xD7E4F2)
$Inputbox1 = GUICtrlCreateInput("Dateiauswahl nur über -Datei auswählen- möglich!", 201, 53, 580, 23, $ES_READONLY)
GUICtrlSetTip(-1, "Dieses Feld füllt sich automatisch" & @CRLF & "über den Button -Datei auswählen-!")
$dateiwahl = GUICtrlCreateButton("Datei auswählen!", 35, 53, 147, 25, $BS_ICON)
GUICtrlSetTip(-1, "Bitte Datei zur Defragmentierung auswählen!")
$labeltext = GUICtrlCreateLabel("Bitte entweder Datei, Ordner oder Laufwerk auswählen!", 37, 22, 600, 21)
$font="Arial Fett"
$dateibericht = GUICtrlCreateButton("Datei-Bericht", 160, 180, 125, 41)
GUISetOnEvent($GUI_EVENT_CLOSE, __GUI_EVENT_CLOSE__)
GUICtrlSetOnEvent($dateiwahl, __idButton_dateiwahl__)
GUICtrlSetOnEvent($dateibericht, __idButton_dateibericht__)
GUISetState(@SW_SHOW)
While Sleep(200)
WEnd
Func __GUI_EVENT_CLOSE__();funktioniert!
Exit
EndFunc
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
Func __idButton_dateiwahl__()
Local $inputbox = "Dateiauswahl nur über -Datei auswählen- möglich!"
Local $id_Dateiwahl
Local $message = "Mehrfachauswahl ist nicht möglich"
Local $dateiwahl = FileOpenDialog($message, @HomePath, "Alle Dateien (*.*)", 1 + 2)
Local $aFiles, $szDrive, $szDir, $szFName, $szExt
If @error Then
Return MsgBox(64, "Achtung", "Sie haben keine Datei ausgewählt")
Else
_GUICtrlListView_BeginUpdate($id_Dateiwahl)
$aFiles = StringSplit($dateiwahl, "|")
If $aFiles[0] > 1 Then ;trifft nur bei Mehrfachauwal zu
;$aFiles[0] enthält Anzahl der Strings
;$aFiles[1] enthält den Pfad für alle ausgewählten Lieder
;$aFiles[2] enthält 1. Lied
;$aFiles[n+1] enthält n. Lied
;Rückgabe des Fileopenialogs in einzzenlne Strings für Array splitten
;_ArrayDisplay($aFiles) ;Array anzeigen nur zu Verständnisuwecken evtl. aktivieren
For $i = 2 To $aFiles[0]
_PathSplit($aFiles[$i], $szDrive, $szDir, $szFName, $szExt)
GUICtrlCreateListViewItem($szFName & "||" & $aFiles[1] & "\" & $aFiles[$i], $id_Dateiwahl)
Next
Else ;nur eine Datei ausgewählt
;;consolewrite($aFiles[1] & @crlf)
_PathSplit($aFiles[1], $szDrive, $szDir, $szFName, $szExt)
GUICtrlCreateListViewItem($szFName & "||" & $aFiles[1], $id_Dateiwahl)
EndIf
_GUICtrlListView_SetColumnWidth($id_Dateiwahl, 0, $LVSCW_AUTOSIZE)
_GUICtrlListView_EndUpdate($id_Dateiwahl)
If @error Then Return MsgBox(64, "Achtung", "Sie haben keine Datei ausgewählt")
Sleep(100)
Return GUICtrlSetData($Inputbox1, $dateiwahl)
EndIf
EndFunc ;==>__idButton_Dateiwahl__
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
Func __idButton_dateibericht__();funktioniert!
Local $daten
Local $datei = (@ScriptDir & "\Test.txt")
Local $contigdir = (@ScriptDir & "\Contig.exe")
Local $dateiwahl = GUICtrlRead($Inputbox1)
If $dateiwahl = "Dateiauswahl nur über -Datei auswählen- möglich!" Then Return MsgBox(64, "Hinweis", "Bitte auswählen Sie zunächst über den Button -Datei auswählen- eine Datei zur Berichtausgabe aus!", 0, $g_hGUI)
Local $bericht = Run($contigdir & ' -a' & " """ & $dateiwahl & """", "", @SW_HIDE, $STDIN_CHILD + $STDOUT_CHILD)
sleep(100)
ProcessWaitClose($bericht)
sleep(100)
StdinWrite($bericht)
sleep(100)
While True
$daten &= StdoutRead($bericht)
If @error Then ExitLoop
Sleep(100)
WEnd
ProcessClose($contigdir)
sleep(100)
ProcessClose($daten)
sleep(100)
FileOpen($datei, 2+32)
sleep(100)
FileWrite($datei, $daten)
sleep(100)
FileClose($datei)
sleep(100)
ShellExecute($datei, "", @ScriptDir, "edit")
sleep(100)
FileClose($datei)
sleep(100)
FileDelete($datei)
;Ausgabe einer Messagebox alternativ zur Ausgabedatei, falls erwünscht
;~ MsgBox(64, "Ergebnis", $datei)
EndFunc ;==>__idButton_dateibericht__
; ++++++++++ +++++++++ ++++++++ +++++++ ++++++ +++++ ++++ +++ ++ +
Alles anzeigen