はじめに:以下のコードで大きなファイル(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;
}