Entwickler-Ecke
Dateizugriff - moderener dateizugriff über streams?
Fred Ferkel - Fr 30.05.03 22:06
Titel: moderener dateizugriff über streams?
hi
ich hörte mal das blockread/write sowie der dateizugriff über assignfile aus der mode sind und man mit streams arbeiten sollte
stimmt dies?
mfg sven
Hansi@OMG - Fr 30.05.03 22:10
Meiner Meinung nach schon, denn mit Streams arbeitet es sich leichter und man hat auch mehr Funktionen. Und so weit ich die Erfahrung gemacht habe, unterstützen auch neuere Komponenten nur noch Streams.
tommie-lie - Fr 30.05.03 22:29
Im Endeffekt bleibt es Geschmackssache. Ich finde Streams logischer, vom Aufbau her, weil ich mich nie damit anfreunden konnte, daß wenn ich einen Record in eine Datei schreiben will, ich dann der Datei sagen muss, was es für ein Record sien soll.
Ein Manko haben aber die Streams: es gibt kein Truncate-Äquivalent, das lässt sich nur mit API erledigen.
Aber es stimmt schon, daß einige Sachen mit Streams eher realisierbar sind und daher diese bevorzugt werden. Zum Beispiel On-The-Fly-Komprimierung oder -Verschlüsselung (siehe zLib, das klappt auch nur mit Streams oder über einen Speicherpuffer).
worm - Fr 30.05.03 22:59
Was mich interessieren würde: Gibt es irgendwelche generellen Performance-Unterschiede zwischen Streams und pascal-files? Weiß da jemand was drüber?
Hansi@OMG - Fr 30.05.03 23:37
Ne leider weis ich nichts darüber. :cry:
BungeeBug - Sa 31.05.03 00:36
Hi,
ich denke bei allen Programmen, die wir hier so proggen, sind die performance Unterschiede, die die Methoden haben, unerheblich ... oder?!
MfG BungeeBug
Fred Ferkel - Sa 31.05.03 01:51
das kommt doch nuun wirklich auf den umfang der datei-opretaionen an; wenn ich in der datei blos so ein paar einstellungen speichere dann ok aber wenn ich nen CRC algorithmus schreiben möchte dann ist die performance schon sehr viel wichtiger
worm - Sa 31.05.03 14:55
Bei mir wären Performance-Unterschiede schon wichtig, deshalb hab ich ja nachgefragt. Zum Einstellungen speichern wäre das wirklich uninteressant. Also hat irgendjemand Ahnung? Oder weiß jemand, wie Pascal Files intern realisiert sind im Vergleich zu Streams?
Motzi - Sa 31.05.03 17:35
ShadowCaster und ich hatten da mal eine längere Diskussion darüber, einfach mal im Forum ein bissche suchen...
@tommie-lie: wegen truncate:
Stream.Size := Stream.Position :roll: ;)
tommie-lie - Sa 31.05.03 18:16
ha, und genau das geht mit FileStreams nicht. Sonst hätte ich mir nicht ein Bein ausgerenkt das rauszukriegen, als ich UltimaTag geschrieben habe und hätte nachher auch nicht wehmütig die API-Funktion benutzt, wegen der das Ganze nicht mehr unter Linux läuft...
w3seek - Sa 31.05.03 18:40
| tommie-lie hat folgendes geschrieben: |
| es gibt kein Truncate-Äquivalent, das lässt sich nur mit API erledigen. |
einfacher geht es aber wenn du einfach das property Size des streams auf die gewuenschte Groesse setzt, dateien schneidet er dann auch ab ;)
ach ja, das funktioniert natuerlich nur dann wenn du die datei mit schreibrechten geoeffnet hast.
tommie-lie - Sa 31.05.03 18:56
| Delphi Online Help hat folgendes geschrieben: |
| Use Size to find the size of the stream. Size is used internally in routines that read and write to and from the stream. Setting the Size property of TStream does nothing. Some descendants of TStream override this property to allow applications to change the size of the resource accessed using the stream. |
Und wenn du dir die Hierarchie vom TFileStream anschaust, wirst du sehen, daß TFileStream das Size-Property
nicht überschreibt, also klappt es normalerweise nicht. Und bei mir hat es das auch nicht getan!
w3seek - Sa 31.05.03 19:32
bei mir schon, erstell eine datei, schreib 20 buchstaben rein und mit folgenden code hat er bei mir die datei auf 10 bytes verkleinert:
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| var fs: TFileStream; begin fs := TFileStream.Create('c:\datei.txt', fmOpenReadWrite or fmShareDenyWrite); fs.Size := 10; fs.Free; |
Ich benutze Delphi 6 Personal
Moderiert von
tommie-lie: Delphi-Tags hinzugefügt
tommie-lie - Sa 31.05.03 20:15
:shock:
Ich fass es nicht, wieso hat das damals nicht geklappt?
GEIL, dann hab' ich mir die Mühe ganz umsonst gemacht!
Motzi - Sa 31.05.03 20:26
Stimmt, TFileStream überschreibt die Methode SetSize nicht, aber THandleStream tut dies und TFileStream ist nunmal von THandleStream abgeleitet! ;) Außerdem.. wieso hast du dir ein ganzes Bein ausrenken müssen? SetEndOfFile ist doch recht einfach in der Handhabung... :roll: ;)
tommie-lie - Sa 31.05.03 20:42
schon, aber ich habe zuerst versucht, irgendwelche Tipps und Tricks zu finden, das ganze ohne API hinzukriegen, also mit den Streams selber. Und da habe ich lange gesucht, nichts gefunden, und dann SetEndOfFile genommen.
Warum es damals nicht geklappt hat mit FileStream.Size ist und bleibt mir ein Rätsel...
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!