1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77:
| function TMFa.ExtractFileHeader(Index:Integer):TDateiInfo; var Datei,Datei2, Datei3, Datei4:TStream; len,HeaderS,oldPos:Integer; DateiHeader:String; DL:String; x:Integer; begin Datei := TFileStream.Create(FileName, fmOpenRead, fmOpenRead); Datei2 := TFileStream.Create(GetExeDir + 'temp\header.tmp', fmCreate); Datei3 := TFileStream.Create(GetExeDir + 'temp\' + ExtractFileName(Filename)+'.tmp',fmCreate); try Datei.Read(Len, SizeOf(Len)); Datei.Read(PChar(DL)^,len);
if Index > len then begin ShowMessage('Fehler(0): Index(' + IntToStr(Index) + ') ist größer als: ' + IntTostr(Len)); exit; end;
if Index <= 0 then begin ShowMessage('Fehler(0): Index(' + IntToStr(Index) + ') ist zuklein als: 1' ); exit; end; HeaderS:=-1; oldPos:=-1;
Datei.Seek(0, soFromBeginning); Datei.Read(HeaderS, SizeOf(HeaderS)); Datei.Read(Len, SizeOf(Len)); DateiCount:=Len; x:=0; DL:=''; SetLength(dl,1); while True do begin inc(x); Datei.Read(PChar(dl)^, 1); if dl = '!' then break; end;
dl:=''; Datei.Seek(Datei.Position-1,soFromBeginning); Len:=-1; Datei.Read(Len, SizeOf(Len)); SetLength(dl,len); Datei.Read(PChar(DL)^, Len); index:=index+1; oldPos:=Datei.Position; Datei.Seek(0,soFromBeginning); Datei2.CopyFrom(Datei,HeaderS); Datei.seek(oldPos,soFromBeginning); HeaderS:=-1; Datei.Read(HeaderS,SizeOf(HeaderS)); Datei3.CopyFrom(Datei,HeaderS); Datei.seek(StrToInt(GetToken(GetToken(DL,'|', index),',',1))+4,soFromBeginning); len:=StrToInt(GetToken(GetToken(DL,'|', index),',',2)); SetLength(DateiHeader,Len); Datei.Read(PChar(DateiHeader)^, Len); Datei.Seek(0,soFromBeginning); Datei.Read(Len,SizeOf(Len));
result.FileName:=GetToken(DateiHeader,';',1); result.FileName:=GetToken(DateiHeader,';',1); result.CreateDateTime:=StrToDateTime(GetToken(DateiHeader,';',2)); result.usesDateTime:=StrToDateTime(GetToken(DateiHeader,';',3)); result.WriteusesDateTime:=StrToDateTime(GetToken(DateiHeader,';',4)); result.FileSize:=StrToInt(GetToken(DateiHeader,';',5)); result.FileDes:=GetToken(DateiHeader,';',6); result.APos:=StrToInt(GetToken(DateiHeader,';',7)); result.EndPos:=StrToInt(GetToken(DateiHeader,';',8)); finally Datei.Free; Datei2.Free; Datei3.Free; end; end; |