shareDenyWrite
(なんかタイトル変だったから直した)
こういう処理があったとして。
static HANDLE OpenShareFile(LPCTSTR lpszFilePath) { UINT nFlgs = FILE_SHARE_DELETE | FILE_SHARE_READ | FILE_SHARE_WRITE; return ::CreateFile(lpszFilePath, GENERIC_READ, nFlgs, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); }
メイン関数の方でこういう風に書かれているとして。
int _tmain(int argc, TCHAR* argv[], TCHAR* envp[]) { if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0)) return 1; const CString sFile = _T("c:\\test.log"); HANDLE hFile = OpenShareFile(sFile); // x ::CloseHandle(hFile); return 0; }
「// x」の部分が下記だとファイルはオープンに成功して、
CStdioFile writer(sFile, CFile::modeCreate | CFile::shareDenyWrite);
下記だとオープン失敗。
CStdioFile writer(sFile, CFile::modeCreate);
なんで?
shareDenyWriteはそんなにえらいの?
後、shareDenyWriteをうっかりつけずにオープンしちゃってるヒトが出力するファイルを監視してると、時々出力する側がファイルオープンに失敗しちゃうわけなんだけど、これはどうしようもないの?
教えてエロい人!