【问题标题】:I can't read a .dat file using fstream我无法使用 fstream 读取 .dat 文件
【发布时间】:2025-11-24 07:50:01
【问题描述】:

我知道有很多关于这个主题的问题,但我无法解决这个问题。该程序在我的笔记本电脑上运行良好,但是当我尝试在学校 Linux 实验室编译和运行它时,程序无法打开文件。我尝试定义绝对文件位置,但没有任何效果。文件名是正确的,但当我尝试运行程序时,它显示“失败”。我正在使用 gedit 并使用 bash 编译程序。

    ifstream fin("rainfall.dat");       // If the file cannot open display failed
    if(fin.fail()){
    cout << "failed" << endl;
    return 1;
    }

【问题讨论】:

  • 你有权限读取文件吗?
  • 如果这是唯一的问题(嗯 - 到目前为止,但这是您的问题所在),那么就没有必要包括所有其他的东西。除非它不使用 并且with 无法使用。你测试过吗?见How to Create a Minimal, Complete, Verifiable Example
  • 是的,我愿意。读和写。
  • 是的,很抱歉,它在 Windows 上一切正常。我把它包括在内是因为我真的不知道是什么让它不起作用。
  • 制作一个非常愚蠢的简单程序:int main(){ifstream fin("rainfall.dat"); if(fin.fail()){ cout &lt;&lt; "failed" &lt;&lt; endl; return 1; } } 看看会发生什么。

标签: c++ fstream ifstream


【解决方案1】:

试试

#include <errno.h>

    if(fin.fail())
        perror("open failed ");

这将为您提供最后一个错误的可读消息

【讨论】:

  • 好的,所以它说没有这样的文件或目录(我想这就是它会说的)但是为什么呢?名称是正确的 rain.dat 位于正确的目录中,如果我尝试放置整个文件路径,我会遇到同样的问题。
  • 我不知道发生了什么变化,但删除文件并重新下载后,程序可以正常工作。
  • 恢复到白痴模式,只是为了确保您的计算机正常工作。 1. 创建一个名为a 的文件。 2. 试试这个程序(当然要使用正确的文件名!)。 3a。如果它有效,那么原始名称中可能会有一些奇怪的字符。 3b。如果没有,你的系统坏了。 (当我打字时)。 ...看来这是3a!