Dateien binär in einer *.ini speichern

  • Zurzeit möchte ich ein Verschlüsselungs-Tool schreiben, das alle Datein in einen "Container" in Form einer *.ini packt. Momentan liest das Programm die Datei binär ein, schreibt den Wert in den "Container" und kann anschließend die Datei aus dem "Container" extrahieren. Mit sehr kleinen Text-Dateien und Bildern klappt das, mache ich dies aber z.B. mit einer 500kb großen kompilierten *.exe, dann ist diese nach dem extrahieren nur noch 14kb groß und funktioniert natürlich nicht mehr. Wieso klappt das nur mit kleinen Dateien? Was mache ich falsch?

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global $IniFile = @ScriptDir & "\Container.ini" ;Name der *.ini
    Global $SourceFileName = "Test.txt" ;Die Datei, die binär in der *.ini gespeichert wird
    ;Global $Password = "Test"

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

    _FileHexRead(@ScriptDir & "\" & $SourceFileName); Zuerst diese Funktion aufrufen, um die Datei in den "Container" zu schreiben
    ;_FileHexWrite(); Danach diese Funktion aufrufen, um die Datei aus dem "Container" zu extrahieren

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

    MfG,
    xp_fan
    Func _FileHexRead($Source)
    $file = FileOpen($Source, 16)
    $hex = FileRead($file)
    FileClose($file)
    IniWrite($IniFile, "Data", "Data" & _IniKeys("Data") + 1, $hex)
    _FileNames()
    Return $hex
    EndFunc ;==>_FileHexRead

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

    Func _FileHexWrite()
    ;$Data = IniReadSection($IniFile, "Data")
    ;$Files = IniReadSection($IniFile, "FileNames")
    For $i = 1 To _IniKeys("Data") Step 1
    $name = IniRead($IniFile, "FileNames", "File" & $i, "None")
    ;MsgBox(0, "Testausgabe", $name)
    $NFile = FileOpen(@ScriptDir & "\" & $name, 18)
    $inhalt = IniRead($IniFile, "Data", "Data" & $i, "0")
    FileWrite($NFile, Binary($inhalt))
    FileClose($NFile)
    Next
    EndFunc ;==>_FileHexWrite

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

    Func _IniKeys($Section)
    $Sections = IniReadSection($IniFile, $Section)
    If @error Then
    Return 0
    Else
    Return $Sections[0][0]
    EndIf
    EndFunc ;==>_IniKeys

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

    Func _FileNames()
    IniWrite($IniFile, "FileNames", "File" & _IniKeys("FileNames") + 1, $SourceFileName)
    EndFunc ;==>_FileNames

    [/autoit]

    Einmal editiert, zuletzt von xp_fan (17. Juli 2010 um 13:30)

  • Das ist komisch, meine *.ini wird fast 1MB groß, wenn ich statt einer *.ini eine *.txt benutze, dann hab ich genau das selbe Problem, wie mit der *.ini.