在 c++ 中打开 fstream 文件时遇到问题(新手)

问题描述 投票:0回答:1

我正在学习 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
也很重要,它不只是一个名字吗?

抱歉问题太多,我对此感到非常困惑,如果有人能为我解决这一切,我将非常感激。

c++ file-handling fstream
1个回答
0
投票

inputFile.txt在这里做什么?

inputFile.txt 允许(在本例中)fin 确定它正在打开的文件,所以是的,它是您打开的文件的名称。

.txt的作用与整个文件名相同。例如,如果您有 2 个 inputFile 文件,其中一个是 .txt,另一个是 .bin,您将使用文件扩展名来区分要打开的文件。

如果我没记错的话,C++ 将无法找到您尝试打开的没有文件扩展名的文件。

fail()
功能

尝试使用

is_open()
而不是
fail()
fail()
更适合读取/写入状态,而不是检查打开错误。
is_open()
将返回一个布尔值,表示文件是否成功打开。

我猜测为什么 filename.txt 有效但 inputFile.txt 不起作用,因为失败不会返回读取或写入错误,因为文件“filename.txt”不存在。

希望这有帮助!

(来源:https://cplusplus.com/reference/ios/ios/fail/

© www.soinside.com 2019 - 2024. All rights reserved.