【问题标题】:Can't read file from a C++ program on a Mac无法从 Mac 上的 C++ 程序读取文件
【发布时间】:2011-08-16 11:08:55
【问题描述】:

首先,这是我的代码的一部分:

....
string input;
getline(cin, input);

ifstream openFile;
openFile.open(input.c_str(), ios::in);

if(openFile.is_open()){
    cout << "File opened" << endl;
}  
else {
    cout << "Cant open the file " << endl;
}

结果总是“无法打开文件”。我非常非常确定这些文件是存在的。我在同一目录中有data1.txt,data2.txt ... data10.txt(我使用XCode添加新的空文件,将数据添加到里面并保存)。

我做另一个测试,我创建一个新目录,复制粘贴 cpp 和数据文件。我在终端中运行,它可以工作,它可以读取数据文件。为什么 xcode 无法读取我的数据文件?有什么想法吗?

【问题讨论】:

  • 这是关于 iOS 或 Mac 开发的吗? input 的具体内容是什么?如果是相对路径,您的进程是否在正确的工作目录中?
  • Mac,一个cpp命令行程序。输入可以是:data1.txt、data2.txt
  • 与 Xcode 完全无关。

标签: c++ file-io readfile file-not-found


【解决方案1】:

您需要提供文件的完整路径。 Xcode 将从构建目录运行应用程序,该目录不是代码所在的位置。

如果文件是作为构建 OSX 或 iOS 应用程序的一部分复制的,您应该查看 bundle structure 以查找目录。

【讨论】:

  • hmmm.. 但我需要将它传递到其他操作系统环境。也许是Linux??它不会再次工作吧?
  • 如果这是纯 C++,那么它将适用于所有环境,但问题是哪些目录是可执行文件和文件。通常的方法是将文件名作为参数传递给可执行文件,而不是依赖他们在同一个目录中
  • @Mark:是的,它是纯C++。一个很基础的。如果我通过mac终端编译并运行它,它就可以工作。但在 xcode 中,它只是不起作用:(
  • 正如我的回答所说,如果运行 frokxcode 或命令行,当前目录会有所不同。在程序中打印 getcwd() 的值以查看。 exec 将在 getcwd()/filename 打开文件
  • 可执行文件的目录可以从argv[0]获取,传递给main()
【解决方案2】:

您可以告诉 Xcode 从包含数据文件的目录运行可执行文件。

打开目标可执行文件的信息对话框,并将“将工作目录设置为:”的值更改为项目目录或自定义目录'

【讨论】:

    猜你喜欢
    • 2021-11-02
    • 2021-08-27
    • 2018-03-21
    • 1970-01-01
    • 2020-07-05
    • 1970-01-01
    • 1970-01-01
    • 2013-04-21
    相关资源
    最近更新 更多