WinRar ähnliches Programm in AutoIt erstellen.

  • Hallo Community.
    Ich wollte fragen ob und wie es möglich ist ein WinRar ähnliches Programm erstellen.
    Mit dem Programm Dateien in einer Datei speichern, diese Datei per Doppelklick öffnen und dann im Programm die Dateien in der Datei verwalten (entpacken, umbenennen)
    Ich will nur wissen ob es möglich ist und wie man die Dateien in einer Datei speichert.
    Danke für möglichen Antworten. :D

    [autoit]


    While $Life = True
    $nMSG = BrainGetMsg()
    Switch $nMSG
    Case $Idea
    _Convert_Idea2Code()
    EndSwitch
    WEnd

    [/autoit]
  • hey!

    hab mir sowas auch schon ma überlegt, mir dann aba gesagt das ich dafür zu faul bin :rofl:
    hatte überlegt die datei(en) mit

    [autoit]


    $file = FileOpen($path, 16) ; --> 16 = binäres Auslesen
    FileRead($file, FileGetSize($path)) ;--> gesamten Dateiinhalt auslesen
    FileClose($file)

    [/autoit]

    auszulesen un dann in ne txt oda en andres Format zu schreibn.. so könnte man dann mehrere Dateien mit geeigneten Trennzeichen dazwischen hintereinander hängen..
    aba ka wie effizient das is (wahrscheinlich sehr wenig xD ) un auch ka wie WinRar das macht..
    vll wissn andere leute mehr:P

    greetz syne

  • Stichwort LMZA http://de.wikipedia.org/wiki/Lempel-Ziv-Markow-Algorithmus
    Ich will dir ja jetzt nicht zu nahe treten aber wie alt/bzw. in welche Klasse gehst du?
    Prinzipiell wäre es denke ich möglich, jedoch wäre AutoIt beim Komprimieren wohl langsamer als so manch andere Sprache.
    Davon abgesehen ist die Datenkompression eine schwierige Angelegenheit da man viel Wissen der Mathematik und der verschiedenen Betriebssysteme bzw. Dateisystemen haben sollte.

    Natürlich möchte ich dich nicht davon abhalten oder so aber so etwas ist schon ein Mammutprojekt :)

    Für was bräuchtest du es denn? Ich könnte dir auch mal 7-Zip empfehlen man kann mit 7-Zip sehr gut per Commandline arbeiten.

    MFG FireFlyer

    *Paradox ist, wenn man sich im Handumdrehen den Fuss bricht* :D

  • um das komprimieren selbst geht es mir nicht.
    Ich möchte nur ungefähr dieselbe Oberfläche wie WinRar haben.
    Programm öffnen, Dateien hinzufügen, alle Dateien in eine schreiben.
    Doppelklick auf diese Datei, Programm öffnet sich, Datei wird per CMDLINE ausgelesen, Name in einer Listview des Programmes angezeigt und man kann dann die einzelnen Dateien (oder auch alle) wieder aus der Datei herausholen. (Komprimieren ist nicht nötig, wollte nur wissen ob das möglich wäre^^)
    Also wie WinRar nur ohne kompri. :D weil das ist mir dann doch wirklich zu schwer...^^
    Ginge das Irgendwie? z.B. die Dateien per trennzeichen Trennen und die 1. Zeile der einzelnen Programme beinhaltet Dateityp, Name und andere Infos...
    Aber danke für die Antworten :)

    [autoit]


    While $Life = True
    $nMSG = BrainGetMsg()
    Switch $nMSG
    Case $Idea
    _Convert_Idea2Code()
    EndSwitch
    WEnd

    [/autoit]
  • könnte gut sein^^
    kannst du mir vielleicht ein paar Tipps geben wie man die einzelnen Dateien zu einer einzigen schreibt?
    Danke :D

    [autoit]


    While $Life = True
    $nMSG = BrainGetMsg()
    Switch $nMSG
    Case $Idea
    _Convert_Idea2Code()
    EndSwitch
    WEnd

    [/autoit]
  • ich habe ja nicht gesagt das ich das rad neu erfinde aber mir persönlich gefählt, Winrar ja nur mir geht die 30 Tagesversion langsam auf den Sack und Cracken oder so möchte ich nicht immer umbedingt.
    Und ausserdem kann mann ja auch durch sowas nur lernen sag ich mir wenn man es selber mal probiert oder ?

  • das denk ich auch!
    ich bin nicht so der AutoIt experte und versuche mich an allem möglichem um viele verschiedene Bereiche kennen zu lernen. Und so ein Programm wäre doch ein lustiger Versuch ;)
    nur komm ich immer noch nicht genau weiter :S
    Geht es, wenn man die Dateien mit fileopen(iwas, 16), also binär liest, mit trennzeichen und informationen in einer Datei speichert, und diese so ähnlich auch wieder speichert?!

    [autoit]


    While $Life = True
    $nMSG = BrainGetMsg()
    Switch $nMSG
    Case $Idea
    _Convert_Idea2Code()
    EndSwitch
    WEnd

    [/autoit]
  • $sDBFile = FileOpenDialog('Dateiauswahl',"",'Alle Datein(*.*)|Zip-Datein(*.zip)|Rar-Datein(*.rar)')
    dann musst du mit den IniWrite und IniRead arbeiten um erstmal dir eine ini zumachen wo er das zwischenspeichert wenn ich dich jetzt so verstanden habe

  • Hallo Sirocool,

    ich glaube du hast die Frage von GE IXI TIM nicht richtig verstanden. Ihm ging es nicht um den FileOpen bzw. FileSave-Dialog sondern um das speichern und wieder auslesen mehrer Dateien in einer einzigen.

    GE IXI TIM, meines Wissens nach hat funkey so etwas schon einmal gemacht um mehrere Resourcen-Dateien (BMP, ICO etc.) in einer Datei zu speichern.

    Falls ihr mit Datenkomprimierung arbeiten wollt, schaut euch mal diesen Post auf AutoItScript.com an, dort findet ihr Folgelinks.
    Ich selbst habe _LZNTCompress zusammen mit SQLite getestet.

    mfg (Auto)Bert

    Einmal editiert, zuletzt von AutoBert (29. September 2009 um 02:47)

  • Ist das so möglich?

    Spoiler anzeigen
    [autoit]


    $path = "Irgendeinpfad.iwas" ; den Pfad der 1. Datei deklarieren
    $file = FileOpen($path, 16) ; die Datei im Binärmodus öffnen
    $binary = FileRead($file) ; die Datei auslesen

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

    $path2 = "Irgendeinandererpfad.iwas" ;2. datei
    $file2 = FileOpen($path2, 16) ;öffnen
    $binary2 = FileRead($file2) ; auslesen

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

    $dest = @DesktopDir &"/test.iwas" ;zielpfad angeben
    $save = FileOpen($dest, 16) ;Pfad im Binärmodus öffnen um die Datei original zu speichern
    FileWrite($save, $binary & "|" & $binary2) ;datei aus den anderen erstellen

    [/autoit]
    [autoit]


    While $Life = True
    $nMSG = BrainGetMsg()
    Switch $nMSG
    Case $Idea
    _Convert_Idea2Code()
    EndSwitch
    WEnd

    [/autoit]
    • Offizieller Beitrag

    Von der Überlegung her, denke ich, dass du durchaus verschiedene Dateien 'zusammenklöppeln' kannst. Allerdings würde ich dieses:
    $binary & "|" & $binary2
    weglassen.
    Du mußt die Dateien, um sie ausführen zu können, sowieso wieder aus der Summendatei extrahieren. Also mußt du zusätzlich die Anfangs- und Endpositionen deiner integrierten Files in der Gesamtdatei abspeichern.
    Wie gesagt: ungetestet, nur gedacht. ;)

    • Offizieller Beitrag

    Nein!
    Da fehlen zum einen die FileClose (aber das nur am Rande), zum anderen musst Du beim speichern den Parameter "2" benutzen, also "16 + 2" oder halt "18" und (was das wichtigste ist) Du darfst kein Trennzeichen verwenden, weil das ja auch in den Dateien vorkommen könnte. Stattdessen musst Du einen Dateiheader anlegen, indem Du die Dateilänge der einzelnen Dateien ablegst.

    Edit: BugFix war mal wieder schneller.

  • muss ich schon wieder umdenken^^
    danke für die aufschlussreiche Hilfe :)

    [autoit]


    While $Life = True
    $nMSG = BrainGetMsg()
    Switch $nMSG
    Case $Idea
    _Convert_Idea2Code()
    EndSwitch
    WEnd

    [/autoit]