Inhalt eines ListViews schnell speichern

  • Hallo,

    ich habe eine Listview mit mehr als 100 Einträgen. Diese werden beim beenden des Scripts durch diese Funktion gespeichert:

    Spoiler anzeigen
    [autoit]

    Func _exit()
    WinSetState($hgui, "", @SW_HIDE)
    If $ItemDeleted = True Then
    $Fopen = FileOpen(@ScriptDir & "\Music2.txt", 2)
    For $NextLoop = 0 To _GUICtrlListView_GetItemCount($ListView3) - 1
    $MusicText = _GUICtrlListView_GetItemTextArray($ListView3, $NextLoop)
    FileWriteLine($Fopen, _
    $MusicText[1] & "|" _
    & $MusicText[2] & "|" _
    & $MusicText[3] & "|" _
    & $MusicText[4] & "|" _
    & $MusicText[5] & "|" _
    & $MusicText[6] & "|" _
    & _GetMusicPathByName($MusicText[1]))
    Next
    FileClose($Fopen)
    FileDelete(@ScriptDir & "\Music.txt")
    FileMove(@ScriptDir & "\Music2.txt", @ScriptDir & "\Music.txt")
    EndIf
    Exit
    EndFunc ;==>_exit

    [/autoit]

    Doch das dauert bei vielen Einträgen zu lange. Gibt es evtl. eine schnellere Methode?

  • Hallo Deepred,

    du könntest versuchen die Listview in ein Array zu speichern und dieses dann mit _FileWriteFromArray in die Datei schreiben, habe es selber aber noch nicht ausprobiert. Aber dieses sollte klappen,

    [autoit]

    FileWriteLine($Fopen, $MusicText & "|" & _GetMusicPathByName($MusicText[1]))

    [/autoit]


    hier im Forum geschrieben also testen,

    mfg (Auto)Bert

    • Offizieller Beitrag

    Das zeilenweise Schreiben kostet bei großen Dateien Zeit.
    Besser Inhalt sammeln und auf einmal schreiben:

    [autoit]

    ; ##### Variable um in einem Rutsch in Datei zu schreiben:
    $sToWrite = ''
    For $NextLoop = 0 To _GUICtrlListView_GetItemCount($ListView3) - 1
    $MusicText = _GUICtrlListView_GetItemTextArray($ListView3, $NextLoop)
    $sToWrite &= _
    $MusicText[1] & "|" _
    & $MusicText[2] & "|" _
    & $MusicText[3] & "|" _
    & $MusicText[4] & "|" _
    & $MusicText[5] & "|" _
    & $MusicText[6] & "|" _
    & _GetMusicPathByName($MusicText[1]) & @CRLF
    Next
    $Fopen = FileOpen(@ScriptDir & "\Music2.txt", 2)
    FileWrite($Fopen, StringTrimRight($sToWrite, 2)) ; hier alles auf einmal schreiben
    FileClose($Fopen)

    [/autoit]