Delphi-PRAXiS
Seite 2 von 2     12   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Simultaner Zugriff auf Datei (https://www.delphipraxis.net/180572-simultaner-zugriff-auf-datei.html)

EarlyBird 2. Jun 2014 18:56

AW: Simultaner Zugriff auf Datei
 
Eventuell kannst Du die Datei auch kopieren und nach dem Lesen löscht du die Datei wieder.

samso 3. Jun 2014 07:16

AW: Simultaner Zugriff auf Datei
 
Liste der Anhänge anzeigen (Anzahl: 1)
Irgendwie verstehe ich die Diskussion nicht. Selbstverständlich kann man eine Datei zum Lesen öffnen, auch wenn sie gerade geschrieben wird. Es können sogar mehrere Prozesse die Datei zum Schreiben öffnen. Dazu muss man TFilestreams mit den korrekten Parametern erzeugen und schon geht das wunderbar.
Zusätzlich sollte man sich einen Transaktions-Mechanismus ausdenken, der sicher stellt, dass die Daten konsistent sind. Aber das war ja hier nicht gefragt. Natürlich darf die Datei von keinem Prozess mit Exklusiv-Rechten geöffnet sein.

Anbei habe ich eine kleine Demo erzeugt. Dieses Programm kann mehrmals gestartet werden und alle können fröhlich auf der Datei schreiben und lesen.
Hinweis: Bei Delphis älter als Delphi 2010 (vielleicht auch 2009?) hat fmCreate noch keinen Share-Parameter erlaubt. Deshalb gibt es im Demo einen etwas wirren Workaround dafür. D.h. Wenn die Datei noch nicht existiert wird die Datei erzeugt und danach nochmal geschlossen. Ab Delphi 2010 kann man sich das sparen.

Dejan Vu 3. Jun 2014 07:32

AW: Simultaner Zugriff auf Datei
 
Wenn ich eine Datei lesen will, die von einem anderen Prozess blockiert wird, kopiere ich mir die Datei und öffne die Kopie. Das klappt fast immer (außer bei SQL-Server).

Der schöne Günther 3. Jun 2014 08:00

AW: Simultaner Zugriff auf Datei
 
Zitat:

Zitat von samso (Beitrag 1261123)
Selbstverständlich kann man eine Datei zum Lesen öffnen, auch wenn sie gerade geschrieben wird. Es können sogar mehrere Prozesse die Datei zum Schreiben öffnen. [...] Natürlich darf die Datei von keinem Prozess mit Exklusiv-Rechten geöffnet sein. Anbei habe ich eine kleine Demo erzeugt.

Du hast vollkommen recht, keine Ahnung warum ich gestern so einen Humbug erzählt habe :oops:

Die Dokumentation zu TFileStream.Create(..) fand ich (vor allem in der deutschen Fassung) auch nicht grade einfach verständlich. Aber wahrscheinlich sind's die Viren in meinem Kopf :vernupft:


Gutes Beispiel. :)

samso 3. Jun 2014 08:08

AW: Simultaner Zugriff auf Datei
 
Aha, dieser Nebensatz scheint entscheidend zu sein.
Zitat:

Zitat von kkoe (Beitrag 1261074)
Und durch das Weglassen der Exklusivrechte können doch wieder andere Programme auf die Datei zugreifen, während dieses Programm am bearbeiten ist, oder? (Das wollte ich ja verhindern)

Der TE will vermutlich durch das exklusive öffnen der Datei den Transaktions-Mechanismus realisieren? Aus den anderen Nebenbemerkungen schließe ich, das die Datei in relativ kurzen Zeitabständen aktualisiert wird (da ist von ms die Rede). In einem solchen Fall würde ich denken, dass das besser über einen Masterprozess realisiert wird, der dann die Daten nach außen via Interprozesskommunikation zu Verfügung stellt.

himitsu 3. Jun 2014 08:12

AW: Simultaner Zugriff auf Datei
 
Zitat:

Zitat von Dejan Vu (Beitrag 1261126)
Wenn ich eine Datei lesen will, die von einem anderen Prozess blockiert wird, kopiere ich mir die Datei und öffne die Kopie.

Wenn du die Datei kopieren kannst, dan gibt das andere Program dir das echt die Datei zu lesen und dann kann man die Datei auch direkt öffnen.

Wenn des andere Programm keine Leserchte gewährt, dann kann man die Datei weder lesen noch kopieren.


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:24 Uhr.
Seite 2 von 2     12   

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