Editor für .save (Gamesavefiles)

iBroker

Neues Mitglied
Guten Tag ich hätte da mal ein anliegen, ich bin gerade dabei einen .sav File Reader für Games zu erstellen und habe da nun ein Problem und komme einfach nicht weiter. Die Savefile ist in einer binären Datenbank gespeichert und wird in eine .db (sqlite3) Datei umgewandelt und dann ausgelesen funktioniert auch alles soweit kann auch Daten ändern usw. jedoch habe ich, jetzt das Problem die Datei wieder zurück in das Ursprüngliche Dateiformat zu bringen normal wäre ja logisch, dass was man beim auslesen und umwandeln macht nur anders herum jedoch ist es leider nicht so einfach kennt sich da wer aus ?

Python:
import os
import gui
import sqlite3
import module.querys as querys
from customtkinter import filedialog

# from typing import Optional, IO, List, Dict, Any, Type


def get_savefile():
    db_header = b"GVAS"
    db_img_string = b"RawDatabaseImage"

    # Save File Open #
    save_file_path: str = filedialog.askopenfilename(
        initialdir=" ", title="Open Save File", filetypes=(("Save File", "*.sav"), ("All Files", "*.*"))
    )
    save_file = open(save_file_path, "rb").read()
    assert save_file.startswith(db_header)
    db_start_index = save_file.index(db_img_string) + 65
    db_start_size = int.from_bytes(save_file[db_start_index - 4 : db_start_index], byteorder="little")
    db_start_data = save_file[db_start_index : db_start_index + db_start_size]

    # Create Temp Database #
    db_tmp_file = os.path.join("src/db_temp.db")
    open(db_tmp_file, "wb+").write(db_start_data)

    # Connection to the Temp Database #
    db_connect = sqlite3.connect(db_tmp_file)
    db_cursor = db_connect.cursor()

    # Cursor on the Database #
    db_cursor.execute("SELECT name FROM sqlite_master WHERE type='table';")
    db_tables = set(map(lambda x: x[0], db_cursor.fetchall()))
    assert db_tables.issuperset(querys.TABLES.keys())
    # All Tables #
    # print(f'{db_tables}\n')
 

Mat

Aktives Mitglied
Woran scheitert es denn? Also ich nehme an, du fügst den geänderten DB-Inhalt (db_temp.db) nach dem Header wieder ein aber die Datei wird nicht erkannt.

Kann es sein, dass nach dem RawDatabaseImage-Block auch noch ein anderer Block folgt, den du nach der DB wieder anfügen musst?
 
Oben Unten