AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi TFileStream: Später nochmal auf unveränderte Datei zugreifen
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von Martin K · begonnen am 2. Sep 2007 · letzter Beitrag vom 2. Sep 2007
Antwort Antwort
Seite 1 von 3  1 23      
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#1

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

  Alt 2. Sep 2007, 00:08
Moin,

also ich habe folgendes Problem:
Eine Datei wird zum Lesen geöffnet, etwa so:
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?
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Muetze1
(Gast)

n/a Beiträge
 
#2

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

  Alt 2. Sep 2007, 01:05
Wenn du den Stream freigibst, dann kann jeder mit dem was machen was er will. Gib ihn nicht frei, dann bleibt er geschützt...
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#3

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

  Alt 2. Sep 2007, 01:08
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?
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#4

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

  Alt 2. Sep 2007, 01:50
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?
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#5

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

  Alt 2. Sep 2007, 01:54
Zitat von Dezipaitor:
Nur wo ist der Fehler?
Es gibt keine 1000€-Scheine

  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#6

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

  Alt 2. Sep 2007, 01:56
Zitat von Dax:
Zitat von Dezipaitor:
Nur wo ist der Fehler?
Es gibt keine 1000€-Scheine

Verdammt bist du schnell
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

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

  Alt 2. Sep 2007, 02:02
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Martin K
Martin K

Registriert seit: 20. Okt 2005
919 Beiträge
 
Turbo Delphi für Win32
 
#8

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

  Alt 2. Sep 2007, 02:09
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?
Mit den Menschen ist es wie mit Computern -
es gibt Nullen und Einsen.
  Mit Zitat antworten Zitat
Dax
(Gast)

n/a Beiträge
 
#9

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

  Alt 2. Sep 2007, 02:17
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.
  Mit Zitat antworten Zitat
Olli
(Gast)

n/a Beiträge
 
#10

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

  Alt 2. Sep 2007, 02:21
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.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 3  1 23      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:30 Uhr.
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