![]() |
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:
Also natürlich soll die Datei während dem Lesen nicht geändert werden, deswegen fmShareDenyWrite.
TFileStream.Create(FileName, fmOpenRead, 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? |
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...
|
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?
|
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? |
Re: TFileStream: Später nochmal auf unveränderte Datei zugre
Zitat:
:duck: |
Re: TFileStream: Später nochmal auf unveränderte Datei zugre
Zitat:
|
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. ;)
|
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? |
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.
|
Re: TFileStream: Später nochmal auf unveränderte Datei zugre
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 15: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