Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
Delphi XE3 Enterprise
|
AW: In Datei Suchen und Kopieren
12. Jan 2013, 19:04
Ich hätte folgendes anzubieten: ACHTUNG tar ist jetzt 0 basiert.
Delphi-Quellcode:
Const
tar: Array [0 .. 8] of Byte =($3E, $00, $53, $00, $47, $00, $40, $00, $3E);
function ByteArrayPos(const SearchArr : array of byte; const CompArr : array of byte) : integer;
// Thomas Wassermann
// result=Position or -1 if not found
var
Comp,Search : AnsiString;
begin
SetString(Comp, PAnsiChar(@CompArr[0]), Length(CompArr));
SetString(Search, PAnsiChar(@SearchArr[0]), Length(SearchArr));
Result := Pos(Search,Comp) - 1;
end;
Function CopyFromToken(Const SrcFile,DestFile:String; const arr:Array of Byte):Boolean;
var
// Thomas Wassermann
src,dst:TFileStream;
Buff:Array of Byte;
Pos,Size:Integer;
FoundPos:Integer;
begin
pos := 0;
Result := false;
Size := High(Arr) * 100;
FoundPos:=-1;
src:=TFileStream.Create(SrcFile,fmOpenRead);
try
if Size > (src.Size - Pos) then Size := src.Size - Pos;
while (FoundPos<0) and ((Pos+Size)<src.Size) do
begin
if High(Buff)+ 1 <> Size then SetLength(Buff,Size);
src.Read(Buff[0],Size);
FoundPos := ByteArrayPos(Arr,Buff);
if (FoundPos<0) and (src.Position < src.Size ) and (src.Size>Size) then
begin
src.Position := src.Position - High(arr) - 1;
Pos := src.Position
end;
end;
if FoundPos > -1 then
begin
src.Position := Pos+FoundPos;
dst := TFileStream.Create(DestFile,fmCreate);
try
dst.CopyFrom(src,src.Size-src.Position);
Result := true;
finally
dst.Free;
end;
end;
finally
src.Free;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
CopyFromToken('C:\temp\Bild 6.png','C:\temp\2.Bin',tar);
end;
Thomas Wassermann H₂♂ Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂♂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
|
|
Zitat
|