Ich versuche, eine Datei zum Schreiben und Lesen gleichzeitig in Windows zu öffnen. Ich habe ein Programm, das (jede Sekunde) in die Datei schreibt und eines, das davon liest. In Unix funktioniert es perfekt, aber es funktioniert nicht in Windows (Ich kann eine bereits geöffnete Datei nicht öffnen). Ich öffne die Datei mit fopen().(Windows) Öffnen Sie die gleiche Datei gleichzeitig
Wie kann ich dieses Problem lösen?
EDIT2:
Check-out _fsopen
es verwendet FILE *
, und der Anteil Flagge entsprechend gesetzt.
EDIT:
Zunächst einmal einige Code: Das ist, wie ich verwenden, um die Datei zu öffnen
FILE* f = NULL;
int res = fopen_s(&f, "c:\\temp\\File1.txt", "w");
if (res != 0) return;
while (true) {
Sleep(1000);
fprintf_s(f , "Some data");
}
fclose(f);
Die Lese in anderer applicaiton war, aber es tat fscanf
statt.
Der feste Code:
char d[] = "data";
HANDLE h = CreateFile("c:\\temp\\f.txt", GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_WRITE | FILE_SHARE_READ, NULL, CREATE_ALWAYS, /*FILE_ATTRIBUTE_NORMAL*/ FILE_FLAG_WRITE_THROUGH, NULL);
if (h == INVALID_HANDLE_VALUE) return 0;
DWORD bytesW;
while(true) {
Sleep(100);
WriteFile(h, d, strlen(d), &bytesW, NULL);
}
CloseHandle(h);
return 0;
Vielleicht wird dies helfen: http://StackOverflow.com/Questions/11566930/Can-Iallow-Multiple-Programs-ToRead-from-the-Same-File-at-the-Same-time – Nim
Vielleicht fügen Sie ein einfaches Beispiel (wie nur Open und Sleep) Programme hinzu, die mit Unix arbeiten, also ist es dann einfacher für jemanden, Win-Code zu machen, der dasselbe tut. – hyde
Bitte Code anzeigen. Ein kurzer Test auf VS 2008 bis VS 2012 zeigt, dass es kein Problem gibt, 'fopen()' zu verwenden, um gleichzeitig eine Datei zum Schreiben und Lesen zu öffnen ('fopen()' verwendet 'FILE_SHARE_READ | FILE_SHARE_WRITE' Zugriff). –