C++ _statファイルの有無判定の注意事項

はじめに:以下のコードで大きなファイル(2G以上)を判定する場合、ファイルが存在するかどうかを正しく判定できません


bool isFileExit(const char * path)
{
	struct _stat s;   //注意创建一个结构体  
	if (_stat(path, &s) == 0)
	{ 
		return s.st_mode & S_IFREG;
	}    
	return false;
}

プロセス: 関連情報を検索すると、エラー情報が errno の変数に格納されていることがわかります。

デバッグ後、戻り値は 132 で、対応するマクロは EOVERFLOW であることが判明し、その説明は次のようになります。カーネルからの情報の転送に使用されるデータ構造内の 1 つ以上のフィールドが小さすぎて値を収容できないたびに、システムコールが返されます

 最終: 上記の分析を通じてコードを最適化できます
        


bool isFileExit(const char * path)
{
	struct _stat s;   //注意创建一个结构体  
	if (_stat(path, &s) == 0)
	{ 
		return s.st_mode & S_IFREG;
	}   
	if (EOVERFLOW == errno)
		return true;
	return false;
}

おすすめ

転載: blog.csdn.net/glc22/article/details/124033568