Savegame Backup Programm

  • Hey,
    ich habe viele Spiele auf dem PC.
    Und möchte die Savegames sicher, da ich ost am PC rumschraube etc. ^^
    Also,
    ich habe hier die Pfade der Spiele:

    Spoiler anzeigen

    Call of Duty 5:
    C:\Dokumente und Einstellungen\Benne\Lokale Einstellungen\Anwendungsdaten\Activision

    Command and Conquer Alarmstufe Rot 3 Der Aufstand:
    C:\Dokumente und Einstellungen\Benne\Anwendungsdaten\Alarmstufe Rot 3 Der Aufstand\Profiles
    C:\Dokumente und Einstellungen\Benne\Eigene Dateien\Alarmstufe Rot 3 Der Aufstand\Profiles

    Black & White 2:
    C:\Dokumente und Einstellungen\Benne\Eigene Dateien\Black & White 2

    Far Cry 2:
    C:\Dokumente und Einstellungen\Benne\Eigene Dateien\My Games\Far Cry 2

    Frontlines - Fuel of War:
    C:\Dokumente und Einstellungen\Benne\Eigene Dateien\My Games\Frontlines - Fuel of War

    Trackmania Nations Forever:
    C:\Dokumente und Einstellungen\Benne\Eigene Dateien\TrackMania\Profiles

    Call of Duty 4:
    C:\Programme\Activision\Call of Duty 4 - Modern Warfare\players\profiles

    SWAT 4:
    C:\Programme\Sierra\SWAT 4\Content\System
    - Campaign.ini
    - DynamicLoadout.ini
    - MissionResults.ini
    - Swat4.ini
    - SwatGUIState.ini
    - User.ini
    - Swat4.log

    Bei allen Spiele muss der ORDNER kopiert werden.
    Bis auf bei SWAT 4, aber da kümmere ich mich selbst drum ^^

    Ja und dann habe ich noch dieses GUI

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Savegame Backup Programm", 633, 306, 367, 298)
    $Label1 = GUICtrlCreateLabel("Savegame Backup Programm", 160, 32, 329, 39)
    GUICtrlSetFont(-1, 18, 800, 0, "Comic Sans MS")
    $Sichern = GUICtrlCreateButton("Sichern", 88, 144, 161, 57, 0)
    GUICtrlSetFont(-1, 18, 800, 0, "Comic Sans MS")
    $Zielpfad = GUICtrlCreateButton("Zielpfad", 384, 144, 161, 57, 0)
    GUICtrlSetFont(-1, 18, 800, 0, "Comic Sans MS")
    $Pfade = GUICtrlCreateButton("Savegame Pfade ändern/hinzufügen!", 200, 272, 249, 25, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    EndSwitch
    WEnd

    [/autoit]

    Ich möchte die Pfade in einer .ini Speichern, damit ich diese jederzeit Verändern kann.

    Deswegen auch der ändern Button.
    Dann soll die .ini eben geöffnet werden.

    Bei Zielpfad, soll angegeben werden, wo die Backups gespeichert werden sollen.

    Ja,
    und ich finde nun keinen Ansatz für das auslesen der ini. (Habe ich noch nie gemacht =P)
    Und dann sollen aus der Ini heraus eben die Pfade ausgelsen werden und die ganzen Ordner kopiert werden und zum Zielpfad kopiert werden.
    (Der Eintrag bei Zielpfad wird dann auch in der .ini gespeichert.!)


    Kann mir jemand helfen? =)

    Mfg
    Benne

  • Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    ;####################GUI Zone ######################
    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Savegame Backup Programm", 633, 306, 367, 298)
    $Label1 = GUICtrlCreateLabel("Savegame Backup Programm", 160, 32, 329, 39)
    GUICtrlSetFont(-1, 18, 800, 0, "Comic Sans MS")
    $Sichern = GUICtrlCreateButton("Sichern", 88, 144, 161, 57, 0)
    GUICtrlSetFont(-1, 18, 800, 0, "Comic Sans MS")
    $Zielpfad = GUICtrlCreateButton("Zielpfad", 384, 144, 161, 57, 0)
    GUICtrlSetFont(-1, 18, 800, 0, "Comic Sans MS")
    $Pfade = GUICtrlCreateButton("Savegame Pfade ändern/hinzufügen!", 200, 272, 249, 25, 0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###
    ;###################GUI Zone #######################

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

    $Ziel = "C:\Sicherung\Savegames"

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

    ;##################Schleife#########################
    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Zielpfad
    MsgBox (0, "Ziel", "Der Standart Zielpfad ist: C:\Sicherung\Spielstände")
    Case $Sichern
    ; 1 Spielstand
    $Pfad = IniRead("Path.ini", "Call of Duty 5", "Pfad", "Error")
    If $Pfad = "Error" Then
    MsgBox (1, "Fehler", "Pfad existiert nicht!")
    Exit
    Else
    DirCopy ($Pfad, $Ziel, 1)
    EndIf
    ;2 Spielstand
    $Pfad = IniRead ("Path.ini", "Black & White 2", "Pfad", "Error")
    If $Pfad = "Error" Then
    MsgBox (1, "Fehler", "Pfad existiert nicht!")
    Exit
    Else
    DirCopy ($Pfad, $Ziel, 1)
    EndIf
    ;3 Spielstand
    EndSwitch
    WEnd
    ;################Schleife###########################

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

    So weit bin ich schonmal ;)

    Hier noch die .ini:

    Spoiler anzeigen
    Code
    [Call of Duty 5]
    Pfad=C:\Dokumente und Einstellungen\Benne\Lokale Einstellungen\Anwendungsdaten\Activision\
    
    
    [Black & White 2]
    Pfad=C:\Dokumente und Einstellungen\Benne\Eigene Dateien\Black & White 2

    So.
    Dann kommt mein Problem.

    Ich möchte die Section der Ini auslesen, zu der der Pfad benutzt wird.
    (1 Spielstand = Call of Duty 5)
    Dann soll beim Zielpfad "\Call of Duty 5" angehängt werden.
    Und dann der Kram vom ersten Spielstand dahinder kopiert werden.
    Dann das gleiche beim zweiten.
    Erneut wird die Section gelesen und dahinter angehängt und in dem modifizierten Zielpfad gespeichert. !
    Nur mein Problem liegt beim "Anhängen".
    Kann mir da jemand helfen??

  • Könnt man noch optimieren indem man alle Quellpfade in eine Section schreibt und dann mit Inireadsection jeden Eintrag nacheinander durchgeht.
    Hat auch den Vorteil, dass man nachträglich einfach Einträge hinzufügen kann ohne im Quellcode rumzupfuschen.

    Ist eigentlich nicht so schwierig, bei Bedarf kann ich auch nachher ein Beispiel posten (hab kein autoit hier am pc).

    edit\ Du willst also einen Ordner im Zielpfad mit dem Namen der Section (bei meinem Vorschlag wäre das dann der Key) erstellen und dort die jeweiligen Daten ablegen?
    Bei deiner Variante hilft IniReadSectionNames - bei meinem Vorschlag reicht Inireadsection, die Info über den Ordnernamen steht auch schon im Array (der Key).

  • Hier das gewünschte Beispiel:

    [autoit]

    #include <array.au3.>
    Global $ini = IniReadSection(@ScriptDir & "\games.ini", "quelle") ;alle Key der Section in ein Array schreiben
    _ArrayDisplay($ini) ;zum besseren Verständnis
    For $i = 1 to $ini[0][0]
    msgbox(1, "", $ini[$i][0]) ;Col 0 -> Key
    msgbox(1, "", $ini[$i][1]) ; Col 1 -> Value
    ;deine Funktion
    next

    [/autoit]

    Die .ini sieht dann so aus:

    Code
    [Quelle]
    Call of Duty 5=C:\Dokumente und Einstellungen\Benne\Lokale Einstellungen\Anwendungsdaten\Activision\
    Black & White 2=C:\Dokumente und Einstellungen\Benne\Eigene Dateien\Black & White 2

    So kannst du mit Dircreate erstmal den Ordner erstellen

    [autoit]

    Dircreate($ziel & "\" & $ini[$i][0])

    [/autoit]

    . Anschließend mit Dircopy die Files kopieren usw.
    Per Dirgetsize kann man auch Quell und Zielordner vergleichen um quasi eine Art Überprüfung des Kopiervorgangs zu haben.

    Wenns noch Fragen gibt einfach melden.