我正在学习 C++ 中的文件处理,在解释如何打开文件的部分中有这样的内容:
ifstream fin( "inputFile.txt" );
或者这个:
ifstream fin;
fin.open( "inputFile.txt" );
我的第一个问题是:
inputFile.txt
在这里做什么?
.txt
的作用是什么?我也看到过 .bin
也被用来代替它。open (filename, mode)
并且 inputFile.txt
是在文件名参数中传递的,为什么我们不能在没有 .txt
的情况下直接放一个字符串呢?我还遇到了另一个问题。当我使用
fail()
函数在 Visual Studio 中编写此命令时,文件似乎无法正确打开,因为它发送了 Error - Failed to open
消息
int main() {
std::ifstream fin("inputFile.txt"); //open file
if (fin.fail()) { //check if opened properly
std::cerr << "Error - Failed to open ";
}
else { std::cout << "Opened properly";
}
return 0;
}
输出:
Error - Failed to open
我注意到它没有问题的唯一情况是当我将
filename.txt
作为参数传递时
int main() {
std::ifstream fin("filename.txt"); //open file
if (fin.fail()) { //check if opened properly
std::cerr << "Error - Failed to open ";
}
else { std::cout << "Opened properly";
}
return 0;
}
输出:
Opened properly
这是为什么呢?在说明中它有
inputFile.txt
,但在这里不起作用。
另外,为什么它是 inputFile.txt
或 filename.txt
也很重要,它不只是一个名字吗?
抱歉问题太多,我对此感到非常困惑,如果有人能为我解决这一切,我将非常感激。
inputFile.txt 允许(在本例中)fin 确定它正在打开的文件,所以是的,它是您打开的文件的名称。
.txt的作用与整个文件名相同。例如,如果您有 2 个 inputFile 文件,其中一个是 .txt,另一个是 .bin,您将使用文件扩展名来区分要打开的文件。
如果我没记错的话,C++ 将无法找到您尝试打开的没有文件扩展名的文件。
fail()
功能尝试使用
is_open()
而不是 fail()
。 fail()
更适合读取/写入状态,而不是检查打开错误。 is_open()
将返回一个布尔值,表示文件是否成功打开。
我猜测为什么 filename.txt 有效但 inputFile.txt 不起作用,因为失败不会返回读取或写入错误,因为文件“filename.txt”不存在。
希望这有帮助!