Ich habe eine Anwendung, die eine Reihe von Datendateien liest und einige Modellberechnungen durchführt. Das Programm muss die Datendateien selbst nicht ändern, daher öffne ich sie momentan mit dem schreibgeschützten Flag, wie unten gezeigt:
%Vor%Ich möchte mehrere Instanzen meines Programms gleichzeitig ausführen, die denselben Datensatz verwenden, aber unterschiedliche Berechnungen an den Daten durchführen. Keines meiner Programme muss die Datendateien ändern. Da die Datendateien sehr groß sind, kann ich keine separaten Kopien der Daten für jedes Programm erstellen.
Ich habe angenommen, dass zwei Programme aus derselben Datei zur gleichen Zeit lesen, da ich die Dateien mit schreibgeschützten Berechtigungen öffne. Stattdessen erhalte ich verschiedene Fehler wie "die Datei konnte nicht geöffnet werden, weil sie von einem anderen Prozess verwendet wird".
Da meine Entwicklungsumgebung Windows 7 ist, schlägt diese Frage vor, dass es möglicherweise darum geht, Lesezugriff zu ermöglichen . Alle Antworten in diesem Thread basieren jedoch auf CreateFile . in der Erwägung, dass es sich um Legacy-Code handelt, der mit stdio.h geschrieben wurde.
Gibt es eine Möglichkeit, mehrere Programme gleichzeitig aus einer Datei mit der fopen-Klasse von Funktionen lesen zu können?
Wenn Sie die Routine fopen
ändern können, versuchen Sie, fopen
Aufrufe durch _fsopen
, zum gemeinsamen Lesen / Schreiben. _fsopen
ist msrt-spezifisch.
Wenn Sie % CreateFile
verwenden können und nicht den gesamten Legacy-Code für Lese- / Schreibvorgänge neu schreiben möchten, können Sie auch versuchen, ein FILE *
mit einem winapi-Datei-Handle zu verknüpfen . Verwenden Sie _open_osfhandle
, um einen Dateideskriptor aus einer Datei zu erhalten handle, die von CreateFile
zurückgegeben wird, verwenden Sie dann _fdopen
um einen FILE *
von diesem Dateideskriptor zu erhalten.