Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Problem mit TMemory- bzw. TFilestream (https://www.delphipraxis.net/70437-problem-mit-tmemory-bzw-tfilestream.html)

Baeuerle 30. Mai 2006 11:39


Problem mit TMemory- bzw. TFilestream
 
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

Christian Seehase 30. Mai 2006 11:48

Re: Problem mit TMemory- bzw. TFilestream
 
Moin Baeuerle,

schau Dir einfach mal eine RTF-Datei im Notepad (oder sonstigem nicht RTF-fähigen Editor) an.

Robert Marquardt 30. Mai 2006 11:49

Re: Problem mit TMemory- bzw. TFilestream
 
In SaveText ist die Zeile "fs.WriteBuffer(ms,ms.Size);" unsinnig. "ms.Memory^" als erster Parameter ist wohl gemeint.
Alternativ "fs.CopyFrom(ms, 0);".

Baeuerle 30. Mai 2006 12:04

Re: Problem mit TMemory- bzw. TFilestream
 
Hat sich erledigt sollte Sizeof(TTextHeader) nehmen und nicht SizeOf(THeader)

Danke trotzdem :oops:


Alle Zeitangaben in WEZ +1. Es ist jetzt 00:49 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