C++ 基本文件 i/o,读取失败

标签 c++ qt file-io fstream ifstream

我正在尝试从教科书中复制一个练习,但是该文件从未读取过,因此触发了 if 语句,告诉我我还没有读取该文件。我没有错误消息或警告。我确信我错过了一些基本的东西,但我只是不知道它可能是什么...... 我正在运行 OSX,Clang7.0,使用 Qt(但我也在 sublime text 中尝试过这个,但它也失败了)

代码如下:

#include <fstream>
#include <iostream>

using namespace std;

int main()
{
    ifstream file_reader ( "myfile.txt" );
    if ( !file_reader.is_open() )
    {
        cout<<"Could not open file!"<<'\n';
    }
    int number;
    file_reader >> number;
    cout<<number;
}

该文件与程序文件位于同一目录中。 它是一个 .txt 文件,仅包含:

12 a b c 

我试过输入完整路径并查看了一些类似的线程,但它似乎与 this 不是同一个问题。

提前感谢您的帮助

最佳答案

正如其他人所指出的,许多 IDE 在其他目录中编译您的程序,但它们通常还提供一种将所需文件复制到同一位置的方法。 Xcode 就是一个很好的例子。如果您找到程序的创建位置,将 myfile.txt 放入该目录,以 `./myprogram' 调用您的程序,您的代码就可以运行了。

如果你想查看你的程序从哪个目录运行,你可以使用 getenv("PWD") 来查找工作目录,然后用它做任何你需要做的事情。

#include <fstream>
#include <iostream>

using namespace std;

int main(int argc, char* argv[])
{
    cout << "PWD = " << getenv("PWD") << endl; // Inspect working directory

    ifstream file_reader ( "myfile.txt" );
    if ( !file_reader.is_open() )
    {
        cout << "Could not open file!" << endl;
        return -1; // If the file wasn't opened, there's no point in going on
    }
    int number;
    file_reader >> number;
    cout << number << endl;
    return 0; // Always return 0 from main() if successful
}

如您所见,OS X 上的 Documents 位于您的主目录中,类似于 /Users/myusername。如果您的路径或文件名包含空格或特殊字符,则在 shell 中双引号是必需的,但在您的程序内部(即您的 ifstream() 初始化)不是必需的,因为参数不会由 shell 解释。 ~ 同样由 shell 解释,但不由标准库或内核解释,这就是为什么在你的程序中使用它不起作用:~/ 不是目录姓名。

关于C++ 基本文件 i/o,读取失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38523330/

相关文章:

c++ - QDataWidgetMapper 和 QDateEdit 值

matlab - 如何在MATLAB中获取特定目录下的所有文件?

c - 将数组写入文本文件

linux - dd 中 ibs/obs/bs 的用途

c++ - std::cout 正在降低 CPU 使用率?

linux - 如何使用 opengl 和 Qt 在 ARM 平台上启动 linux?

c++ - C++中的动态内存点

python - pyQt - 如何基于 QGroupBox 选择小部件

c++ - 如何使自定义 MSBuild 目标的执行依赖于文件的时间戳?

c++ - 将函数模板定义为类模板的回调