[B+, B2D, B3D] einfacher Dateipacker
Übersicht

![]() |
EPSBetreff: [B+, B2D, B3D] einfacher Dateipacker |
![]() Antworten mit Zitat ![]() |
---|---|---|
Hi zusammen,
ich hab mal einen einfachen Dateipacker und Entpacker geschrieben. Sollte durch die Kommentare selbsterklärend sein. Code: [AUSKLAPPEN] ;==============================================================================================================
; Language: Blitz 2D, 3D, + ; ; Einfacher Dateipacker und Entpacker (keine Komprimierung, keine Verschlüsselung !!!). ;============================================================================================================== Result = FP_PackageFile("test.jpg", "paket.pck"): Print Result Result = FP_ExtractFile("test.jpg", "paket.pck", "kopie von test.jpg"): Print Result WaitKey() End Function FP_PackageFile(InputFile$="", PackageFile$="") ;============================================================================================================== ; Fügt die Datei InputFile$ zu dem Paket PackageFile$ hinzu. ; ; Bei der Angabe von InputFile$ wird nur der Dateiname übernommen. Ein angegebener Dateipfad wird ignoriert. ; ; Ist die Datei PackageFile$ nicht vorhanden wird sie erzeugt. Ist PackageFile$ kein Paket oder tritt ein ; anderer Fehler auf, liefert die Funktion False zurück. Klappt alles wird True zurück gegeben. ;============================================================================================================== Local PackHandle, InpHandle, InpBank, InpSize, i ;--> Wurden Input und Package Datei übergeben und existiert Input Datei. If InputFile$="" Or PackageFile$="" Or FileType(InputFile$) <> 1 Then Return False ;--> existiert Package Datei? Wenn nicht lege sie an. If FileType(PackageFile$) <> 1 Then PackHandle = WriteFile(PackageFile$) ;--> Konnte Datei geöffnet werden? If PackHandle = 0 Then Return False ;--> schreibe Header WriteInt PackHandle,$2D535045 WriteInt PackHandle,$6B636150 CloseFile PackHandle End If ;--> Erzeuge Input Bank. InpSize = FileSize(InputFile$) InpBank = CreateBank(InpSize) ;--> Lies Input Datei ein. InpHandle = ReadFile(InputFile$) ReadBytes InpBank,InpHandle,0,InpSize CloseFile InpHandle ;--> Öffne Package Datei. PackHandle = OpenFile(PackageFile$) ;--> Konnte Datei geöffnet werden? If PackHandle = 0 Then Return False ;--> Prüfe Header. If ReadInt(PackHandle) <> $2D535045 Or ReadInt(PackHandle) <> $6B636150 Then CloseFile PackHandle Return False End If ;--> Setze Zeiger auf EOF. SeekFile PackHandle, FileSize(PackageFile$) ;--> Prüfe ob im Input Dateinamen ein Pfad enthalten ist. Wenn ja, extrahiere den Dateinamen. If Instr(InputFile$,"\") > 0 Then For i = Len(InputFile$) To 1 Step -1 If Mid$(InputFile$,i,1) = "\" Then InputFile$ = Right$(InputFile$,Len(InputFile$)-i) Exit End If Next End If ;--> Schreibe Dateinamen und Länge des Namen der Input Datei. WriteInt PackHandle, Len(InputFile$) For i = 1 To Len(InputFile$) WriteByte PackHandle,Asc(Mid$(InputFile$,i,1)) Next ;--> Schreibe Anzahl der Daten und den Bulk. WriteInt PackHandle, InpSize WriteBytes InpBank,PackHandle,0,InpSize ;--> schließe Datei. CloseFile PackHandle ;--> Bank freigeben. FreeBank InpBank ;--> okidoki Return True End Function Function FP_ExtractFile(ExtractFile$="", PackageFile$="", WriteToFile$="") ;============================================================================================================== ; Extrahiert die Datei ExtractFile$ aus dem Paket PackageFile$. ; ; Die Angabe von WriteToFile$ ist optional. Es dient dazu der Datei einen individuellen Namen zu geben. So ; können alle extrahierten Dateien eine spezifische Extension, zum Beispiel .TMP, bekommen. Auf diese Weise ; kann man später alle Dateien mit dieser Extension einfacher identifizieren und löschen. ; ; Existiert die Zieldatei schon, wird diese NICHT überschrieben. ; ; Wird die Datei erfolgreich extrahiert und geschrieben gibt die Funktion True zurück. Andernfalls False. ;============================================================================================================== Local PackHandle, WToBank, WToHandle, NLength, NName$, i ;--> Prüfe ob Paket existiert und alle Namen übergeben wurden. If FileType(PackageFile$) <> 1 Or PackageFile$ = "" Or ExtractFile$ = "" Then Return False ;--> Öffne Paket Datei. PackHandle = ReadFile(PackageFile$) ;--> Konnte Datei geöffnet werden? If PackHandle = 0 Then Return False ;--> Prüfe Header. If ReadInt(PackHandle) <> $2D535045 Or ReadInt(PackHandle) <> $6B636150 Then CloseFile PackHandle Return False End If ;--> Suche Extract Datei. While Not Eof(PackHandle) ;--> Lies Dateinamenlänge. NLength = ReadInt(PackHandle) ;--> Lies Dateinamen. NName$ = "" For i=1 To NLength NName$ = NName$ + Chr$(ReadByte(PackHandle)) Next ;--> Der richtige Name? If Lower$(NName$) = Lower$(ExtractFile$) Then Exit ;--> Wenn nicht überspringe Bulk. NLength = ReadInt(PackHandle) SeekFile PackHandle, FilePos(PackHandle) + NLength Wend ;--> Wenn hier das Dateiende ist, wurde die Datei nicht gefunden. If Eof(PackHandle) Then Return False ;--> Andernfalls lies Länge des Bulk. NLength = ReadInt(PackHandle) ;--> Erzeuge Bank. WToBank = CreateBank(NLength) ;--> Lies Bulk. ReadBytes WToBank, PackHandle, 0, NLength ;--> schließe Datei. CloseFile PackHandle ;--> Neuer Dateiname? If WriteToFile$ = "" Then WriteToFile$ = NName$ ;--> Existiert die Zieldatei schon? If FileType(WriteToFile$) = 1 Then Return False ;--> Öffne Ausgabedatei. WToHandle = WriteFile(WriteToFile$) ;--> Konnte Datei geöffnet werden? If WToHandle = 0 Then Return False ;--> schreibe Datei. WriteBytes WToBank, WToHandle, 0, NLength ;--> Schließe Datei. CloseFile WToHandle ;--> Bank freigeben. FreeBank WToBank ;--> okidoki Return True End Function |
||
mGUI - Graphical User Interface für Blitz3D...Informationen gibt es hier
Man kann sich öfter als zweimal im Leben halb tot lachen. |
![]() |
TheRealSephiroth |
![]() Antworten mit Zitat ![]() |
---|---|---|
danke war/is echt hilfreich
einziges manko: er braucht viel systemleistung aber ansonsten danke |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group