Windowsプログラミングでファイルを開く時にCreateFileを使うわけですが、書き込みをしながら同じファイルを読み込み共有で開きたい時に共有フラグをどう設定すればよいかでたまに悩むことがあります。そんな時のためのちょっとしたメモです。
書き込み側
書き込み側は、FILE_SHARE_READのみをつければよいようです。ソースコードでいうとこんな感じ
1 2 3 4 5 6 7 8 |
::CreateFile( _T( "ファイル名" ), GENERIC_WRITE, FILE_SHARE_READ, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL ); |
読み込み側
読み込み側は、FILE_SHARE_READ及びFILE_SHARE_WRITEをつけて開く必要があるようです。ソースコードでいうとこんな感じ
1 2 3 4 5 6 7 8 |
::CreateFile( _T( "ファイル名" ), GENERIC_READ, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL ); |
ここでFILE_SHARE_WRITEを付け忘れると
プロセスはファイルにアクセスできません。別のプロセスが使用中です。
というようなエラーが返ってくるので要注意です。