![]() |
Re: Datei mit "#0" schreiben?
Bei meinem
![]() Da ich sowieso eine Klasse von TStringList ableiten mußte, habe ich deshalb gleich deren Routine LoadFromStream(..) ersetzt. Diese Routine rief eine andere namens SetTextStr(..) auf, welche auf #0 prüfte. Den Teil hab' ich geändert (Minimaler Eingriff in den Original Code), danach hat die abgeleitete stringlist brav bis zum Ende gelesen. Vielleicht reicht ja so ein Eingriff bei Deinem Problem auch - zumindest für's Lesen? (Siehe Source von UnitUsage, Datei DelDirective.pas) Ansonsten hat ja TStringList mit #0 keine Probleme - Beim Schreiben wird's halt wieder klemmen ;) Gruß Michael |
Re: Datei mit "#0" schreiben?
Und genau mit dem schreiben hab ich das Problem ^^ Weil solange ich nirgens eine Datei mit #0 schreiben kann, kann ich auch nicht testen, ob er auch richtig liest (obwohl bisher es brav aussieht ^^)
|
Re: Datei mit "#0" schreiben?
Pointer(#0)^? Ein Pointer auf ein Literal? Aua.
Delphi-Quellcode:
var fs: TFileStream;
buf: Char; begin //... fs.Write(buf, 1); //... end; |
Re: Datei mit "#0" schreiben?
[Editiert, um den größten Krampf meiner letzten Antwort loszuwerden. Hab' irgendwie das Thema verfehlt... :oops: ]
TStringList schreibt zumindest den Null Charakter brav raus (SaveToFile, welches intern einen TFileStream verwendet), lediglich das ReadFromFile fängt unnötigerweise mit dem Interpretieren an. Mit TStringList sollte es also wenig Probleme geben, solche Dateien zu erzeugen (Delphi 6). Allerdings wird #0 als Zeilenumbruch interpretiert (Siehe z.B. Classes.pas procedure TStrings.SetTextStr(..); Das könnte einem beim Arbeiten mit der StringListe dann doch mal was verhageln... Gruß Michael |
Re: Datei mit "#0" schreiben?
@xZise: Leg ein Array of Byte an, das die Länge der Dateigröße besitzt. Anschließend liest du die Datei über FileOpen(), FileRead() in dein Array ein. Mit einer For-Schleife durchsuchst du nun Zeichen für Zeichen dein Array of Byte und kopierst dir die Segmente heraus die du benötigt. (zum Bleistift mit Copy() sofern es sich um ANSI-Dateien handelt) Den Dateiaufbau sollte man möglichst genau kennen... Abschließend noch ein FileClose ausführen. Fertig.
|
Re: Datei mit "#0" schreiben?
Hallo,
warum nicht nach dieser Methode: Seek(eof) Zusatzdaten anhängen und zum einlesen: Seek(eof) zurücklesen bis #0 Wär jetzt nur mal so eine grobe Idee ohne dass ich den Code grad im Kopf hab, aber dass müsste doch funktionieren. Gruß Matthias |
Re: Datei mit "#0" schreiben?
Weil file of <typ> veraltet ist und es dafür FileStreams gibt?
|
Re: Datei mit "#0" schreiben?
Also... Danke an den Borg (^^)... Jetzt funktioniert es wunderbar... Er trennt korrekt, und schreibt auch so wie ich das will ;) thx ^^
PS: Wie kann man den im Notepad ein #0 einfügen? |
Re: Datei mit "#0" schreiben?
In Notepad geht das nicht.
Delphi-Quellcode:
und dann einfach mit dem String arbeiten, die ganze datei ist da drin
var s: String;
begin fm := TfileStream.create(...); SetLength(s, fm.size); Read(s[1], fm.size); fm.free; end; ein String endet immer mit #0, aber er wird nicht bei einer #0 abgeschnitten sondern die Länge wird mitgespeichert bla := 'blub'#0'hallo' ist ein gültiger String length(bla) = 10 PChar(bla) = 'blub' bla[length(bla)+1] = #0 |
Alle Zeitangaben in WEZ +1. Es ist jetzt 20:36 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