Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Datei Header und Struktur? (https://www.delphipraxis.net/116564-datei-header-und-struktur.html)

xSkaschY 2. Jul 2008 06:01


Datei Header und Struktur?
 
Hallo zusammen,

ich wollte mal wieder ein wenig mit Delphi rum experimentieren, und mir mal die *.pbo-Dateien von meinem Spiel angeschaut. (Sind gepackte Dateien wie zip/rar)

Dabei wollte ich mir ein Programm schreiben, welches mir den Inhalt dieser Datei anzeigt.

Habe auch, glaube ich zumindestens, alle benötigten Informationen die ich dafür brauche, ich weiss aber nicht wie ich die richtig anwende.

Wie sage ich meinem Programm nun das er die Datei mit den o.g. Daten öffnet?

Grüße

Toby

xSkaschY 2. Jul 2008 18:10

Re: Datei Header und Struktur?
 
Sooo,

hab mal etwas gegoogelt und bin nun soweit gekommen:

Delphi-Quellcode:
function readFile(pFilename: PChar): PChar; stdcall;
var
        rPBOFile: TFileStream;
        iFilesize: Integer;
        sContent, sBuffer: String;
        liLen: longInt;
begin
        rPBOFile := TFileStream.Create(pFilename, fmOpenRead);
       
        try
                iFilesize := rPBOFile.Seek(0, 2);

                sContent := ExtractFileName(pFilename) + '
Filesize: ' + formatFilesize(iFilesize, true) + ' - Files in PBO: 0';
                sContent := sContent + '<hr />';

                rPBOFile.Read(liLen, iFileSize);
                SetLength(sBuffer, liLen);

                rPBOFile.Seek(0, 0);
                rPBOFile.Read(sBuffer, Length(sBuffer));

                sContent := sContent + 'Buffer:<code>' + sBuffer + '</code>';
                sContent := sContent + '<hr />';
        finally
                rPBOFile.Free;
                Result := PChar(sContent);
        end;
end;
Die Ausgabe stimmt genau mit der Datei überein, jedoch wenn ich nach
Delphi-Quellcode:
sContent := sContent + 'Buffer:<code>' + sBuffer + '</code>';
das hier hinzufüge;

Delphi-Quellcode:
sContent := sContent + 'First match: ' + IntToStr(Pos(Chr(0), sBuffer)) + '
';
zeigt er mir "0" an. eine weitere Ausgabe von sBuffer sagt mir das diese Variable leer ist, warum ist dem so?


LG Toby

shmia 2. Jul 2008 18:38

Re: Datei Header und Struktur?
 
Delphi-Quellcode:
rPBOFile.Read(sBuffer, Length(sBuffer)); // Falsch

// sBuffer ist ein AnsiString
// das ist fast das Gleiche wie ein  array of char
// Deshalb muss man das 1. Element der Read() bzw. ReadBuffer() Methode übergeben
rPBOFile.ReadBuffer(sBuffer[1], Length(sBuffer)); // Richtig
sieht komisch aus, ist aber so ;-)
Die Verwendung von ReadBuffer anstelle von Read erspart dir das Prüfen, ob auch alle Bytes gelesen wurden

xSkaschY 2. Jul 2008 19:03

Re: Datei Header und Struktur?
 
Zitat:

Zitat von shmia
Die Verwendung von ReadBuffer anstelle von Read erspart dir das Prüfen, ob auch alle Bytes gelesen wurden


Dann bekomme ich ein "Stream-Lesefehler" an den Kopf geworfen.

Mein Code at the moment:
Delphi-Quellcode:
function readFile(sFilename: String): String;
var
        rPBOFile: TFileStream;
        sContent, sBuffer: String;
        iFileSize: Integer;
begin
        rPBOFile := TFileStream.Create(sFilename, fmOpenRead or fmShareDenyWrite);
        try
                iFileSize := rPBOFile.Size;
                {
                sContent := ExtractFileName(sFilename) + '
Filesize: ' + formatFilesize(iFileSize, true) + ' - Files in PBO: 0';
                sContent := sContent + '<hr />';
                }
                rPBOFile.ReadBuffer(sBuffer[1], iFileSize);

                //sContent := sContent + 'First match: [b]' + IntToStr(Pos(Chr(0), sBuffer)) + '[/b]

Filecontent:
';
                sContent := sContent + '<code>' + sBuffer + '</code>';
        finally
                Result := sContent;
                rPBOFile.Free;
        end;
end;
Streams können echt nervig sein. :)


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:21 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz