![]() |
TFileStream = einges format
Hallo,
ich möchte ein eingen arichver schreiben, doch ich hahbe probleme beim erstellen des heades. ich habe es so versucht:
Delphi-Quellcode:
aber das geht auch nicht.
procedure TMfa.Packe;
var Datei:TStream; i,len,Size:Integer; DateiHeader:String; Test:TSearchRec; CFTime, EFTime, RFTime:_FileTime; DL:String; begin Datei := TFileStream.Create(FileName, fmCreate); Len:=Dateien.Count; Datei.Write(Len, SizeOf(Len)); for i:=0 to Dateien.Count-1 do begin FindFirst(Dateien.Strings[i], faAnyFile,test); FileTimeToLocalFileTime(test.FindData.ftCreationTime, CFTime); FileTimeToLocalFileTime(test.FindData.ftLastWriteTime, EFTime); FileTimeToLocalFileTime(test.FindData.ftLastAccessTime, RFTime); DateiHeader:=Dateien.Strings[i] + ';' + DateTimeToStr(FileTimeToDateTime(CFTime)) + ';' + DateTimeToStr(FileTimeToDateTime(EFtime)) + ';' + DateTimeToStr(FileTimeToDateTime(RFtime)) + ';' + IntToSTr(test.Size) + ';' + FileGetTypeName(Dateien.Strings[i]) + ';' + 'PositionA' + ';' + 'PositionE'; Len:=StrLen(PChar(DateiHeader)); dl:=dl + IntTostr(Datei.Position) + ',' + InttoStr(Len) + '|' ; Datei.Write(Len, SizeOf(Len)); Datei.Write(PChar(DateiHeader)^,Len); DateiHeader:=''; end; len:=StrLen(PChar(DL)); Datei.Write(Len, SizeOf(Len)); Datei.Write(PChar(dl)^, len); Datei.Free; FindClose(test); end; procedure TMFa.Entpacke(Index:Integer); var Datei:TStream; len:Integer; DateiHeader:String; DL:String; begin Datei := TFileStream.Create(FileName, fmOpenRead); Datei.Read(Len, SizeOf(Len)); // die länge für DL auslesen SetLength(DateiInfo,len); // länge setzen Datei.Seek(datei.Size-30,soFromEnd); SetLength(dl,30); Datei.Read(PChar(DL)^, Len); // header ein lesen ShowMessage(dl); Exit; // Datei.seek(StrToInt(GetToken(GetToken(DL,'|', index),',',1)),soFromBeginning); len:=StrToInt(GetToken(GetToken(DL,'|', index),',',2)); SetLength(DateiHeader,Len); // Header länge setzen Datei.Read(PChar(DateiHeader)^, Len); // header ein lesen {DateiInfo[index-1].FileName:=GetToken(DateiHeader,';',1); DateiInfo[index-1].CreateDateTime:=StrToDateTime(GetToken(DateiHeader,';',2)); DateiInfo[index-1].usesDateTime:=StrToDateTime(GetToken(DateiHeader,';',3)); DateiInfo[index-1].WriteusesDateTime:=StrToDateTime(GetToken(DateiHeader,';',4)); DateiInfo[index-1].FileSize:=StrToInt(GetToken(DateiHeader,';',5)); DateiInfo[index-1].FileDes:=GetToken(DateiHeader,';',6);} Datei.Free; end; kann mir jemmand sagen wie man sowas am besten macht ? danke:) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:02 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