Einzelnen Beitrag anzeigen

Baeuerle

Registriert seit: 17. Mär 2005
Ort: Ettenheim
283 Beiträge
 
Delphi 2005 Professional
 
#1

Problem mit TMemory- bzw. TFilestream

  Alt 30. Mai 2006, 12:39
Hallo zusammen,

ich möchte in einer Datei mehrere RTF Texte speichern. Leider habe ich mit den Streams so meine Probleme.
Es folgt meine Idee:

Delphi-Quellcode:
// Header enthält die Eigenschaften des folgenden RTF Textes
type TTextHeader = record
      Index: Word; // Identifier
      Name: ShortString; // Name für den RTF-Text
      Size: Cardinal; // Größe des RTF-Textes der folgt
      end;

const RESOURCEFILE = 'c:\DataResource.dat';
      HEAD_SIZE = SizeOf(THeader);
      NTFS_TEXT = 1; // Index für einen Textteil

procedure SaveText(re: TRichEdit; Name: ShortString; Index: Word)
var Header: TTextHeader;
    fs: TFileStream;
    ms: TMemoryStream;
begin
Header.Index:=Index;
Header.Name:=Name;
ms:=TMemoryStream.Create;
re.Lines.SaveToStream(ms);
ms.Position:=0;
Header.Size:=ms.Size;
fs:=TFileStream.Create(RESOURCEFILE,fmCreate);
fs.WriteBuffer(header,HEAD_SIZE);
fs.WriteBuffer(ms,ms.Size);
fs.Free;
ms.Free;
end;

procedure ReadText(re: TRichEdit; SearchIndex: Word);
var Header: TTextHeader;
    fs: TFileStream;
    ms: TMemoryStream;
begin
fs:=TFileStream.Create(RESOURCEFILE,fmOpenRead or fmShareDenyNone);
while(fs.Position<fs.Size) do
 begin
 fs.Read(Header,HEAD_SIZE);
 if Header.Index = SearchIndex then break;
 fs.Seek(Header.Size,soFromCurrent);
 end;
if Header.Index = SearchIndex then
 begin
 ms:=TMemoryStream.Create;
 ms.SetSize(Header.Size);
 ms.CopyFrom(fs,Header.Size);
 re.Lines.LoadFromStream(ms);
 ms.free;
 end;
fs.free;
end;
So jetzt bin ich mal gespannt, ob jemand von euch den Fehler sieht.

Danke im vorraus
  Mit Zitat antworten Zitat