【问题标题】:unable to open file stream c++无法打开文件流 C++
【发布时间】:2015-06-04 04:23:42
【问题描述】:

我正在使用 Xcode,但无法打开文件流以从文本文件中分配变量。我推测将 txt 文件放在与项目相同的目录中将允许我打开流而不包括整个目录。我已经搞砸了一段时间,但无济于事,我可以让它正常工作。我相信我能够在某一时刻读取数据,但我认为打印的字符串是 unicode(不确定)。这是一个非常简单的程序。我认为它会起作用。 我认为我的问题与示例所在的目录以及 Xcode 如何处理项目文件有关。我只是将示例文件放在项目文件夹中,希望它可以工作。

#include <iostream>
#include <fstream>
#include <string>

using namespace std;
int main()
{
    string name;
    ifstream infile;
    infile.open("example.txt");
    if(infile.is_open())
    {
        infile >> name;
    }
    else
        cout << "Unable to open file";

    cout << name;
    return 0;
}

【问题讨论】:

  • 它是否适用于绝对路径?
  • 我没试过。虽然给了它一些,但我真的不知道如何在mac上做到这一点。我最近得到了这台电脑,我还不是很喜欢 Xcode。
  • 你是如何运行程序的?因为您没有在文件上指定路径,所以它会检查您当前的工作目录,该目录不能保证是程序所在的位置。
  • 我正在从 Xcode 构建它。我什至将文件导入到项目中,但没有奏效。它仍然无法打开文件。如果不是工作目录,程序还能驻留在哪里。
  • 如果你要给出流的相对路径,那么路径应该是相对于当前工作目录的。在尝试打开给定文件之前尝试将其打印出来,您可能会看到您的相对路径已关闭。当前工作目录通常与您运行的可执行文件相同的目录,但可能随时更改(例如,在初始化任何第三方库期间)。这就是 Borgleader 询问绝对路径的原因。根据它们的性质,您不需要根据当前工作目录来修改它们。

标签: c++ fstream


【解决方案1】:

首先,请记住,工作目录并不总是与程序的二进制文件所在的目录相同。

变化:

infile.open("example.txt");

到:

infile.open("/full/path/to/program/directory/example.txt");

其中/full/path/to/program/directory/ 是文件夹的位置,程序(以及example.txt 文件)所在的位置。它应该可以解决问题。


顺便说一句,您可能还想阅读this question,它解决了非常相似的问题。

另外,阅读getcwd() function

【讨论】:

  • 不确定如何在 Mac 上输入完整目录路径(Apple 新手)。 “/desktop/practice/example.txt” 不起作用。
  • 做“~/Desktop/practice/example.txt”
  • 它有效。完整的路径名在程序的一侧。
猜你喜欢
  • 1970-01-01
  • 2021-09-23
  • 1970-01-01
  • 1970-01-01
  • 2013-04-02
  • 2019-02-10
  • 1970-01-01
  • 2014-10-21
  • 2015-12-17
相关资源
最近更新 更多