Windowsで同時に書き込みと読み取りを行うファイルを開こうとしています。 私は、ファイルに書き込むプログラム(1秒おきに1つ)とそこから読み取るプログラムを持っています。 Unixでは完全に動作しますが、Windowsでは動作しません(すでに開いているファイルを開くことはできません)。 私はfopen()でファイルを開きます。(Windows)同じファイルを同時に開く
どうすればこの問題を解決できますか?
EDIT2:
がFILE *
を使用_fsopen
をチェックし、それに応じて共有フラグを設定します。
EDIT:すべての
まず、いくつかのコード:これは私が
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);
読み取りが他のapplicaitonにあったファイルを開くために使用されるが、それは代わりに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 2008からVS 2012へのクイックテストは、 'fopen()'を使ってファイルを同時に開いたり( 'fopen()'が 'FILE_SHARE_READ | FILE_SHARE_WRITE'アクセスを使用すること)、問題はないことを示しています。 –