Delphi-PRAXiS
Seite 1 von 3  1 23      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi TFileStream: Später nochmal auf unveränderte Datei zugreifen (https://www.delphipraxis.net/98811-tfilestream-spaeter-nochmal-auf-unveraenderte-datei-zugreifen.html)

Martin K 1. Sep 2007 23:08


TFileStream: Später nochmal auf unveränderte Datei zugreifen
 
Moin,

also ich habe folgendes Problem:
Eine Datei wird zum Lesen geöffnet, etwa so:
Delphi-Quellcode:
TFileStream.Create(FileName, fmOpenRead, fmShareDenyWrite)
Also natürlich soll die Datei während dem Lesen nicht geändert werden, deswegen fmShareDenyWrite.
Nun würde ich aber nach dem Freigeben des Streams fmShareDenyWrite gerne lassen, da ich später nochmal auf die Datei zugreifen muss und diese in der Zwischenzeit nicht geändert werden sollte.
Die Frage ist:
Geht das irgendwie?

Eine andere Möglichkeit wäre natürlich, den Stream irgendwie zu Puffern und einfach im Speicher zu lassen, so dass ich beim nächsten Zugriff nicht mehr auf die Datei, sondern einfach auf den gespeicherten Stream zugriefe, doch da weiß ich irgendwie nicht, wie ich das machen soll, einfach den Stream als Variable speichern und nicht freigeben?
Was meint ihr?

Muetze1 2. Sep 2007 00:05

Re: TFileStream: Später nochmal auf unveränderte Datei zugre
 
Wenn du den Stream freigibst, dann kann jeder mit dem was machen was er will. Gib ihn nicht frei, dann bleibt er geschützt...

Martin K 2. Sep 2007 00:08

Re: TFileStream: Später nochmal auf unveränderte Datei zugre
 
Ja, das ist schon klar, aber ich brauch ihn halt einmal am Anfang und dann noch etwas später, du meinst also, dass ich den Stream dann erst ganz zum Schluss freigeben soll?

Dezipaitor 2. Sep 2007 00:50

Re: TFileStream: Später nochmal auf unveränderte Datei zugre
 
Wenn du auf die Strasse einen 1000€ Schein legst, und darauf aufpasst (mit Waffe oder so), dann wird der höchstwahrscheinlich nicht gestohlen.
Aber sobald du weggehst - wie hoch ist die Wahrscheinlichkeit, dass der Schein "Beine bekommt und wegläuft"? Richtig - sehr hoch.

Was lernen wir daraus?
Lasse nichts unbeaufsichtig, wenn du nicht willst, dass es angefasst wird. Und wenn du nicht die ganze Zeit darauf aufpassen willst, dann Sperre es weg (ACL).

Nur wo ist der Fehler?

Dax 2. Sep 2007 00:54

Re: TFileStream: Später nochmal auf unveränderte Datei zugre
 
Zitat:

Zitat von Dezipaitor
Nur wo ist der Fehler?

Es gibt keine 1000€-Scheine :mrgreen:

:duck:

Olli 2. Sep 2007 00:56

Re: TFileStream: Später nochmal auf unveränderte Datei zugre
 
Zitat:

Zitat von Dax
Zitat:

Zitat von Dezipaitor
Nur wo ist der Fehler?

Es gibt keine 1000€-Scheine :mrgreen:

:duck:

Verdammt bist du schnell :lol:

Luckie 2. Sep 2007 01:02

Re: TFileStream: Später nochmal auf unveränderte Datei zugre
 
Entweder du schliesst den FileStream nicht oder, um das ganze im Code deutlicher zu machen, übergib den FileStream einem MemoryStream. Wobei ein MemoryStreeam auch die Methode LoadFromFile kennt. Es läuft also im Prinzip beides auf das gleiche hinaus. ;)

Martin K 2. Sep 2007 01:09

Re: TFileStream: Später nochmal auf unveränderte Datei zugre
 
Also erstmal danke für eure Antworten!

Ich habe mich nun dazu entschieden, den Stream erst ganz zum Schluss freizugeben.

Es sieht folgendermaßen aus:
Am Anfang (zu Beginn meiner Prozedur) wird die Datei komplett (Byte für Byte) eingelesen.
Dann mache ich etwas und ganz zum Schluss der Prozedur wird die Datei nochmals (Byte für Byte) eingelesen.
Ich habe es jetzt so gemacht, dass der Stream über die ganze Prozedur hin geöffnet ist, und eben erst ganz zum Schluss freigegeben wird, ist denke ich auch die einfachste Methode.

Die Frage ist nur, wenn ich das in einen MemoryStream speichere, ist dann das zweite einlesen ggf. schneller?

Dax 2. Sep 2007 01:17

Re: TFileStream: Später nochmal auf unveränderte Datei zugre
 
Wenn du die Datei per LoadFromFile in einen Memorystream lädst, hast du die gesamte Datei [u]im Speicher[i]. Damit dauert das erste einlesen also um einiges länger, aber dafür sind alle anderen Operationen auf die Daten fast in Nullzeit machbar - und deine Daten werden nicht einfach so von anderen Programmen verändert, während deine Prozedur durchläuft.

Olli 2. Sep 2007 01:21

Re: TFileStream: Später nochmal auf unveränderte Datei zugre
 
Zitat:

Zitat von Dax
Wenn du die Datei per LoadFromFile in einen Memorystream lädst, hast du die gesamte Datei [u]im Speicher[i]. Damit dauert das erste einlesen also um einiges länger, aber dafür sind alle anderen Operationen auf die Daten fast in Nullzeit machbar - und deine Daten werden nicht einfach so von anderen Programmen verändert, während deine Prozedur durchläuft.

Probleme gibt es nur, wenn die Datei zu groß für den RAM und die Auslagerungsdatei ist.


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:28 Uhr.
Seite 1 von 3  1 23      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz