fopen vs CFile::Open vs _access
ファイルの書き込みオープンのチェックに関して
以下の3つの処理の違い、ご存知だろうか?
1. fopenを使う場合
FILE *fp = fopen(file_name, "w"); if (fp == NULL) { return; } fclose(fp);
2. CFile::Openを使う場合
CFile file; if (file.Open(file_name, CFile::modeWrite) == 0) { return; } file.Close();
3. _accessを使う場合
if (_access(file_name, 2) != 0) { return; }
GetFileAttributeってのもあるか。
ファイルを実際に開いてるかは置いておいて、
他のアプリがファイルを使っていてロックしているときに
fopenだとエラーを返してくれるのに、他2つはスルーしちゃうことがあった。
CFileで実際に書き込むとどうなるかは試してないけど、
CFileの方で事前にチェックして、書き込み処理はfopenで開こうとして失敗ってことがあった。(∞ループで、無応答)
まぁ、そこのエラー処理が甘かったってのがあるんだけど。
気をつけなはれやっ!