| Autor |
Beitrag |
megaman7de
Hält's aus hier
Beiträge: 10
Win XP Prof.
Delphi 2005
|
Verfasst: Fr 21.04.06 03:55
hallo,
Ich hab eine einfache funktion zum schreiben von daten in datein.
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| procedure wr(FileName : TFilename; WriteText : string); var f : Textfile; begin AssignFile(f, FileName); try if FileExists(FileName) = False then Rewrite(f) else begin Append(f) end; Write(f, WriteText); finally CloseFile(f); end; end; |
mit der funktion war ich immer sehr zufrieden bis ich was binäres schreiben wollte...
soll heißen wenn ich z.B.
Delphi-Quelltext 1:
| wr('C:\a.txt', Char(5)); |
1000-3000x aufrufe dann stimmt die ausgabegröße nicht immer....
woran liegt das?
|
|
Kroko
      
Beiträge: 1284
W98 W2k WXP
Turbo D
|
Verfasst: Fr 21.04.06 06:45
(a) Ich habe die Proc. genau 3000x aufgrufen und die Dateigröße liegt exact bei 3000 Byte!
(b) Jetzt noch mal 30000x und die Dateigröße liegt jetzt bei 33000!
(c) Ich sehe kein Problem!
_________________ Die F1-Taste steht nicht unter Naturschutz und darf somit regelmäßig und oft benutzt werden! oder Wer lesen kann, ist klar im Vorteil!
|
|
Horst_H
      
Beiträge: 1654
Erhaltene Danke: 244
WIN10,PuppyLinux
FreePascal,Lazarus
|
Verfasst: Fr 21.04.06 07:27
Hallo,
dass kann villeicht an Chr(26)=Strg-Z=^Z liegen, was als Dateiende von Textdateien in CP/M,DOS-Zeiten genutzt wurde.
Gruss Horst
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Fr 21.04.06 07:32
Auf AssignFile, Write, Append etc. sollte verzichtet werden!
Nimm lieber einen Stream, z.B. ein TFileStream.
_________________ Na denn, dann. Bis dann, denn.
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Fr 21.04.06 07:57
alzaimar hat folgendes geschrieben: | | Auf AssignFile, Write, Append etc. sollte verzichtet werden! |
Warum? Für diesen Fall ist das die einfachste Lösung. Oder ist das obsolet geworden und ich habs nicht mitbekommen? Ansonsten hast du recht. TFileStream ist in vielen Fällen die bessere Lösung.
|
|
Horst_H
      
Beiträge: 1654
Erhaltene Danke: 244
WIN10,PuppyLinux
FreePascal,Lazarus
|
Verfasst: Fr 21.04.06 08:46
Hallo.
wer suchet der findet
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28:
| program Project2; {$APPTYPE CONSOLE} uses SysUtils;
procedure wr(FileName : TFilename; WriteText : string); var f : Textfile; begin AssignFile(f, FileName); try if FileExists(FileName) then Append(f) else Rewrite(f); Write(f, WriteText); finally CloseFile(f); end; end;
var i : integer;
begin for i :=0 to 511 do wr('C:\a.txt', Char(i div 16)); end. |
Im hex-Editor sieht man das chr(14) = $0E nicht ausgegeben wird.
[url=de.wikipedia.org/wik...erzeichen]Hier[/url] die Erklaerung.
Alle Zeichen zwischen $0E und $0F werden einem anderen Zeichensatz zugehorig behandelt.
Das Steuerzeichen selbst wird nicht ausgegeben. hier auch
Gruss Horst
|
|
alzaimar
      
Beiträge: 2889
Erhaltene Danke: 13
W2000, XP
D6E, BDS2006A, DevExpress
|
Verfasst: Fr 21.04.06 20:20
jasocul hat folgendes geschrieben: | alzaimar hat folgendes geschrieben: | | Auf AssignFile, Write, Append etc. sollte verzichtet werden! |
Warum? Für diesen Fall ist das die einfachste Lösung. Oder ist das obsolet geworden und ich habs nicht mitbekommen? Ansonsten hast du recht. TFileStream ist in vielen Fällen die bessere Lösung. |
Ich find ja auch, das man immer das einfachste nehmen sollte, aber wenn Borland in der OH (D6) schreibt, dann mach ich da eine Ausnahme. Aber wenn sie die Routinen bei BDS2006 immernoch drin haben, dann weiss ich auch nicht.
Ich würde aber mal sagen, das ein TFilestream auch dezent einfacher ist, als ein AssignFile mit Append/Rewrite.
_________________ Na denn, dann. Bis dann, denn.
|
|
jasocul
      
Beiträge: 6395
Erhaltene Danke: 149
Windows 7 + Windows 10
Sydney Prof + CE
|
Verfasst: Fr 21.04.06 20:40
Dass ist die typische Konsequenz der Software-Hersteller. 
|
|