在 c++ 中读取文件时如何解决问题 [已关闭]

How to solve problem when reading from a file in c++ [closed]

提问人:Diego 提问时间:8/11/2023 更新时间:8/12/2023 访问量:72

问:


编辑问题以包括所需的行为、特定问题或错误以及重现问题所需的最短代码。这将有助于其他人回答这个问题。

3个月前关闭。

我正在尝试从 .txt 文件中读取信息,但发生了一些非常奇怪的事情。

代码如下:

ifstream fichier(dir);
fichier.open(dir);
     
if (fichier.is_open())
    cout << "file is opened";

double a;
fichier >> a;

我可以在屏幕上看到“文件已打开”这句话,但没有将任何内容分配给“a”。 文件不是空的,我已经验证过了。

C++ fstream 读取文件 ifstream

评论


答:

3赞 Remy Lebeau 8/12/2023 #1

ifstream fichier(dir);

在此语句中,您将文件名传递给构造函数,以便它立即打开文件。

fichier.open(dir);

然后,在此语句中,您将文件名传递给 ,因此它尝试再次打开同一文件并失败,从而将流置于您未清除的错误状态。这就是为什么之后不读任何东西。open()fichier >> a

一个文件流不能同时打开两个文件句柄。如果它已经打开了一个文件,则需要先打开它,然后才能用它打开另一个文件。close()

最简单的解决方案是一开始就不要打开流两次。也:

  • 更改为ifstream fichier(dir);ifstream fichier;
//ifstream fichier(dir);
ifstream fichier;
fichier.open(dir);
  • 删除后fichier.open(dir);ifstream fichier(dir);
ifstream fichier(dir);
//fichier.open(dir);