![]() |
PChar auf Text-File zeigen lassen
Hallo Zusammen!
Stecke mal wieder tief im Unwissen :gruebel: -- und hoffe wieder auf eure Hilfe. Eine Funktion erwartet zwei Parameter: "aBuf: PChar; aLen: integer" Nun möchte ich den Inhalt einer Text-Datei in aBuf, und ihre Länge in aLen laden - "laden" ist das falsche Wort, ich möchte das aBuf auf den Inhalt der Text-Datei und aLen auf die Länge zeigen. Da ich mit PChar keine Erfahrung habe, meine Frage: Wie geht das wohl? Muß ich die Text-Datei erst laden, und danach den aBuf "darauf zeigen" lassen... (und wenn ja -- wie?). Bin über jeden Hinweis dankbar! Vielen Dank & Gruß Jazzman |
Re: PChar auf Text-File zeigen lassen
Es gibt da eine nützliche Funktion, mit der man eine Datei in einen String laden kann:
Delphi-Quellcode:
Und dann:
function FileToString(const FileName: string): AnsiString;
var fs: TFileStream; Len: Integer; begin fs := TFileStream.Create(FileName, fmOpenRead or fmShareDenyWrite); try Len := fs.Size; SetLength(Result, Len); if Len > 0 then fs.ReadBuffer(Result[1], Len); finally fs.Free; end; end;
Delphi-Quellcode:
var
aBuf: PChar; aLen: integer; s : AnsiString; begin s := FileToString('testdatei.txt'); aBuf := PAnsiChar(s); aLen := Length(s); ... end; PS: hier noch die Umkehrfunktion StringToFile():
Delphi-Quellcode:
procedure StringToFile(const FileName: string; const Contents: AnsiString);
var fs: TFileStream; Len: Integer; begin fs := TFileStream.Create(FileName, fmCreate); try Len := Length(Contents); if Len > 0 then fs.WriteBuffer(Contents[1], Len); finally fs.Free; end; end; |
Re: PChar auf Text-File zeigen lassen
Ja, du mußt die Datei erst irgendwo in einen Puffer/Buffer laden.
Entweder mit einem TFileStream in einen eigenen Puffer laden oder du nimmst einen TMemoryStream und kannst davon dann direkt den .Pointer (eventuell noch nach PChar casten) und .Size für die beiden Parameter deiner Funktion verwenden. PS: zum Thema PChar ... Welche Delphi-Version nutzt du denn? Denn ab Delphi 2009 solltes du aufpassen, da dort ein Char aus 2 Byte besteht. |
Re: PChar auf Text-File zeigen lassen
Ihr seid super! :hello:
Lieben Dank! Gruß Jazzman |
Re: PChar auf Text-File zeigen lassen
:gruebel: Ähmm...
Nochmal eine kleine Nachfrage zu: Zitat:
Ich dachte aBuf zeigt auf den gesamten File und nicht nur auf die ersten 4 Bytes des Files?! Oder missverstehe ich da was? Danke nochmals! Jazzman |
Re: PChar auf Text-File zeigen lassen
Ein PChar zeigt auf das erste Zeichen deines Strings.
Deswegen benötigt der auch die Länge des Strings :) |
Re: PChar auf Text-File zeigen lassen
Achja, wieder was gelernt. :-D
Danke & Gruß Jazzman |
Re: PChar auf Text-File zeigen lassen
Zitat:
und bei einem UnicodeText in einem AnsiString kann es nunmal viele Nullen geben. |
Re: PChar auf Text-File zeigen lassen
Nebenbei: Mit MMFs kann man auch direkt mit dem Dateiinhalt arbeiten. Für so kleine Dateien ist das egal, aber wenn größere Dateien eingelesen und bearbeitet werden sollen, dann kann man damit eine sehr starke Leistungssteigerung erreichen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:31 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