udtrække info fra en binær fil
hej experter.jeg sidder og nørkler med at udtrække noget info fra en binær fil, men det vil bare ikke rigtigt. jeg har lavet en klasse:
unit uGetPxdInfo;
interface
uses
Classes, SysUtils;
type
TPxdFile = class(TObject)
private
FValid: Boolean;
FTagName: String;
FGroup: String;
FSource: String;
FFileSize: Cardinal;
FFileName: WideString;
procedure FResetData;
public
constructor Create;
function ReadFromFile(const FileName: WideString): Boolean;
property Valid: Boolean read FValid;
property FileSize: Cardinal read FFileSize;
property TagName: String read FTagName;
property Group: String read FGroup;
property Source: String read FSource;
end;
implementation
type
PxdRecord = record
ID: array[0..3] of Char;
TagName: array[0..29] of Char;
Group: array[0..19] of Char;
Source: array[0..13] of Char;
end;
function ReadPxd(const FileName: WideString; var PxdData: PxdRecord): Boolean;
var
SourceFile: TFileStream;
begin
try
Result := true;
SourceFile := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite);
SourceFile.Free;
except
Result := False;
end;
end;
function HeaderIsValid(const PxdData: PxdRecord): Boolean;
begin
Result := True;
if PxdData.ID <> 'tPxD' then Result := False;
end;
procedure TPxdfile.FResetData;
begin
FValid := False;
FFileSize := 0;
FFileName := '';
FTagName := '';
FGroup := '';
FSource := '';
end;
constructor TPxdfile.Create;
begin
inherited;
FResetData;
end;
function TPxdfile.ReadFromFile(const FileName: WideString): Boolean;
var
PxdData: PxdRecord;
begin
FResetData;
FillChar(PxdData, SizeOf(PxdData), 0);
Result := ReadPxd(FileName, PxdData);
if (Result) and (HeaderIsValid(PxdData)) then
begin
FValid := True;
FTagName := PxdData.TagName;
FGroup := PxdData.Group;
FSource := PxdData.Source;
FFileName := FileName;
end;
end;
end.
i pxdrecord har jeg defineret nogle statiske arrays, man da længden af TagName, Group og Source hvordan ordner man det så med en dynamisk array, eller er der en bedre måde at gribe det an på?
eks. på start af pxd fil:
tPxD Underline** Cut 4 //hex: 74 50 78 44 14 55 6E 64 65 72 6C 69 6E 65 2A 2A
0D 0A 43 75 74 20 34
/FunteX! :-)
