1. ホーム
  2. c++

[解決済み】C++で空のファイルをチェックする

2022-02-09 22:54:12

質問

ファイルが空かどうかを簡単に確認する方法はありますか? 例えば、ある関数にファイルを渡しているときに、それが空であることに気づいたら、すぐにファイルを閉じるような? ありがとうございます。

編集、fseekメソッドを使ってみましたが、「cannot convert ifstream to FILE *」というエラーが出ます。

私の関数のパラメータは

myFunction(ifstream &inFile)

解決方法は?

おそらく、似たようなものでしょう。

bool is_empty(std::ifstream& pFile)
{
    return pFile.peek() == std::ifstream::traits_type::eof();
}

短く、甘く。


あなたのエラーについてですが、他の回答はC言語スタイルのファイルアクセスを使用しており、その場合は FILE* 特定の機能を持つ

それに対して、あなたや私はC++のストリームを扱っているので、それらの関数を使うことはできません。上記のコードは、単純な方法で動作します。 peek() は、ストリームを覗き込み、次の文字を削除せずに返します。もしファイルの終端に達したなら、それは eof() . つまり、私たちはただ peek() をストリームで見て、それが eof() というのも、空のファイルには覗き見るものがないからです。

なお、これはファイルがそもそも開かれなかった場合にも真を返すので、あなたの場合はうまくいくはずです。もし、そうしたくない場合は

std::ifstream file("filename");

if (!file)
{
    // file is not open
}

if (is_empty(file))
{
    // file is empty
}

// file is open and not empty