AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Datei Header und Struktur?

Offene Frage von "xSkaschY"
Ein Thema von xSkaschY · begonnen am 2. Jul 2008 · letzter Beitrag vom 2. Jul 2008
Antwort Antwort
xSkaschY

Registriert seit: 19. Jun 2006
Ort: Bünde
95 Beiträge
 
Delphi 2007 Professional
 
#1

Datei Header und Struktur?

  Alt 2. Jul 2008, 07:01
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
  Mit Zitat antworten Zitat
xSkaschY

Registriert seit: 19. Jun 2006
Ort: Bünde
95 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Datei Header und Struktur?

  Alt 2. Jul 2008, 19:10
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
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
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#3

Re: Datei Header und Struktur?

  Alt 2. Jul 2008, 19:38
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
Andreas
  Mit Zitat antworten Zitat
xSkaschY

Registriert seit: 19. Jun 2006
Ort: Bünde
95 Beiträge
 
Delphi 2007 Professional
 
#4

Re: Datei Header und Struktur?

  Alt 2. Jul 2008, 20:03
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:33 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz