在 C 中检查一个空文件

新手上路,请多包涵

有没有一种简单的方法来检查文件是否为空。就像你将一个文件传递给一个函数并且你意识到它是空的,然后你马上关闭它?谢谢。

编辑,我尝试使用 fseek 方法,但我收到一条错误消息,提示“无法将 ifstream 转换为 FILE *”。

我的函数的参数是

myFunction(ifstream &inFile)

原文由 Crystal 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 784
2 个回答

也许类似于:

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

短而甜。


考虑到您的错误,其他答案使用 C 样式的文件访问,您可以在其中获得具有特定功能的 FILE*

相反,你和我正在使用 C++ 流,因此不能使用这些函数。上面的代码以一种简单的方式工作: peek() 将查看流并返回而不删除下一个字符。如果到达文件末尾,则返回 eof() 。因此,我们只是 peek() 在流中查看它是否是 eof() ,因为空文件没有什么可看的。

请注意,如果文件从未打开过,这也会返回 true,这应该适用于您的情况。如果你不想这样:

 std::ifstream file("filename");

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

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

// file is open and not empty

原文由 GManNickG 发布,翻译遵循 CC BY-SA 2.5 许可协议

如果您的用例提供了在打开文件之前检查是否为空的可能性,

C++17为您提供 is_empty

 #include <filesystem>

if (!std::filesystem::is_empty("path.txt")) {
     ///Open and use the file
}

原文由 Antonio 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题