FileClose

  • Ich lese aus einer Datei etwas aus und schliesse die Datei mit FileClose. Wenn ich anschliessend die Datei mit FileDelete löschen will, dann findet der Löschvorgang erst beim Beenden des Skriptes statt. Öffne ich die Datei vorher nicht, dann wird die Datei sofort gelöscht.

    Ich vermute, dass die Datei trotz FileClose in Benutzung ist.
    Wie werde kann ich diese wieder freigeben?

    Spoiler anzeigen
    [autoit]


    $sDatei = "irgendeine bestehende Datei"

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

    FileOpen($sDatei, 0)
    ; lese irgendetwas ein
    FileClose($sDatei)
    FileDelete($sDatei)
    Sleep(5000)

    [/autoit]

    Einmal editiert, zuletzt von tollpan (19. Dezember 2012 um 22:40)

  • Du musst nach FileOpen nicht mit dem Dateinamen, sondern mit dem Dateihandle arbeiten (Rückgabewert von FileOpen):

    [autoit]


    $sDatei = "irgendeine bestehende Datei"

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

    $hFile = FileOpen($sDatei, 0)
    ; lese irgendetwas ein
    FileClose($hFile) ;*hust*
    FileDelete($sDatei) ;Hier stand schon immer $sDatei *pfeif*
    Sleep(5000)

    [/autoit]

    2 Mal editiert, zuletzt von chesstiger (19. Dezember 2012 um 23:03)

    • Offizieller Beitrag
    [autoit]

    $sDatei = "irgendeine bestehende Datei"

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

    $hFile = FileOpen($sDatei, 0)
    ; lese irgendetwas ein
    FileClose($hFile)
    FileDelete($sDatei)
    Sleep(5000)

    [/autoit]

    Edit: chessi, deine Zeile 5

    [autoit]

    FileClose($hDatei)

    [/autoit]


    ist falsch

  • FileClose erwartet ein Dateihandle als Parameter so wie es von FileOpen zurück gegeben wird.
    Du übergibst jedoch einen Dateipfad als String.
    Schau dir einfach mal die AutoIt-Hilfe zu den jeweiligen Funktionen an, da kannst du dann auch sehen wie du prüfst ob eine Funktion korrekt ausgeführt wurde.
    In dem Fall muss der Rückgabewert von FileClose = 1 sein.

  • Nö, du hast dir anscheined nur die Befehle nicht in der Hilfe angeschaut.

    FileOpen gibt ein Handle zurück, mit welchen du arbeiten musst.
    Dadurch schließt du die Datei auch niemals!


    [autoit]

    $sFile = @ScriptDir & "\test.txt"

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

    $hFile = FileOpen($sFile)
    $s = FileRead($hFile)
    ConsoleWrite($s)
    FileClose($hFile)

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

    FileDelete($sFile)

    [/autoit]


    Das z.B. funktioniert, da ich mit dem FileHandle arbeite, das eben von FileOpen zurückgegeben wird.

    Mfg

    Edit: Viiiieel zu langsam -.-

    There's a joke that C has the speed and efficieny of assembly language combined with readability of....assembly language. In other words, it's just a glorified assembly language. - Teh Interwebz

    C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do, you blow off your whole leg. - Bjarne Stroustrup
    Genie zu sein, bedeutet für mich, alles zu tun, was ich will. - Klaus Kinski