Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TFileStream = einges format (https://www.delphipraxis.net/7131-tfilestream-%3D-einges-format.html)

mimi 3. Aug 2003 13:50


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:
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;
aber das geht auch nicht.
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