我試圖在windows中同時打開和讀取文件。 我有一個程序寫入(每一秒)的文件和一個讀取它。在Unix下它工作正常,但它不能在Windows中工作(我無法打開已打開的文件)。 我用fopen()打開文件。(Windows)同時打開同一個文件
我怎樣才能解決這個問題?
EDIT2:
退房_fsopen
它使用FILE *
,並相應地設置共享標記。
編輯:
首先,一些代碼:這是我用來打開文件
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);
讀是在其他應用程序了,但它確實fscanf
代替。
固定代碼:
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;
也許這將有助於:http://stackoverflow.com/questions/11566930/can-i-allow-multiple-programs-to-read-from-the-same-file-at-the-same-time – Nim
也許增加一個簡單的例子(比如只是打開和睡眠)在unix上工作的程序,所以對於某些人來說,Win代碼執行相同的操作會更容易。 – hyde
請顯示驗證碼。通過VS 2012對VS 2008進行快速測試表明,使用'fopen()'打開文件以便同時進行寫入和讀取('fopen()'使用'FILE_SHARE_READ | FILE_SHARE_WRITE'訪問)沒有問題。 –