gpt4 book ai didi

c++ - 关闭 C++ 文件流未打开

转载 作者:行者123 更新时间:2023-11-28 02:45:47 25 4
gpt4 key购买 nike

假设您声明了一个 std::ifstreamstd::ofstream 的实例,但是 is_open() 返回 0

例子:

std::ifstream file("myfile.txt");
if (!file.is_open()) {
printf("Could not open file\n");
return;
}

既然文件从未打开过,我还需要在 printf 语句之后调用 file.close() 吗?

最佳答案

不,您只能关闭一个打开的文件(类似于您无法关闭已经关闭的门 - 没有什么可做的)。

额外注意:请不要将 C I/O 库(Xprintf 函数系列)与 C++ I/O 库 (iostreams) 结合使用。

考虑使用这样的代码:

std::ifstream file("myfile.txt");
if (!file.is_open()) {
std::cerr << "Could not open file\n";
return;
}

编辑(不一起使用 C IO API 和 C++ IO API 的原因):

  • 同时使用这两个 API 会在它们之间强加同步,C API 优先(即,C API 保持一样快,但 IO 流将因同步要求而变慢)。

  • 这是不一致的,对同一任务使用两个截然不同的概念/抽象级别。在更复杂的代码中,您将不得不编写两倍的错误处理(它们在客户端代码中强加了不同风格的错误处理),既有它们的局限性又结合了它们的缺点(C API 在读取和读取时容易出现缓冲区溢出/安全问题)无声地失败,除非您非常注意每个 API 调用的编写/维护,否则 C++ API 调用可能会很冗长。

它们不需要离得特别近(或远),这只是一种糟糕的编程习惯。

这类似于使用通用的 ODBC C API 读取数据库的表 1,使用 ActiveX 数据对象读取同一个数据库和同一个程序中的表 2,或者使用 Qt 进行开发,然后使用 raw 对其进行修改WinAPI 调用:您有两倍的问题要解决(很多时候最终会针对相同的问题实现两次解决方案)。

关于c++ - 关闭 C++ 文件流未打开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24487381/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com