C ++基本文件i / o,无法读取

时间:2016-07-22 09:49:31

标签: c++ qt file-io fstream ifstream

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

这是代码:

#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

的问题不同

感谢您提前提供任何帮助

1 个答案:

答案 0 :(得分:2)

正如其他人所指出的,许多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解释,但不是由标准库或内核解释,这就是为什么在程序中使用它不起作用:~/不是目录名。