Xcode 新手无法在 C++ 中打开文件?

Posted

技术标签:

【中文标题】Xcode 新手无法在 C++ 中打开文件?【英文标题】:New to Xcode can't open files in c++? 【发布时间】:2014-06-19 17:50:12 【问题描述】:

我一直在学习的课程中使用 windows,但我正在尝试运行一个基本代码来弄清楚如何从 Xcode 上的文件中打开/关闭/输入/输出以及我通常在视觉上使用的代码工作室不知道为什么?谢谢!

#include <string>
#include <iostream>
#include <fstream>
using namespace std;

int main()

    ifstream fin;
    ofstream fout;
    string input;

    fin.open("inputFile.txt");
    if(fin.fail())
        cout << "File failed to open." << endl;
    fin >> input;

    fout.open("outputFile.txt");

    fout << input;



【问题讨论】:

也 #include 它没有复制...无论哪种方式我的输出都是“文件无法打开。” inputFile.txt在哪里? 尝试指定文件的绝对路径。 XCode 在您的源代码所在的另一个位置执行,因此假设源目录的相对路径将不起作用。 欢迎来到 Xcode。你会找到this answer helpful,我几乎可以肯定。 【参考方案1】:

将您的 .txt 文件放在您的 main.cpp 文件所在的同一目录中(或您喜欢的任何位置)。

在 Xcode 中,转到 Product > Scheme > Edit Scheme > Run test(右侧)> Options(中间顶部)

在“选项”下选中“使用自定义工作目录”并将其设置为 .txt 文件所在的目录。

要使用文件,您必须只指定文件名,例如in_file.open("inputFile.txt");不需要路径。

【讨论】:

但是如果你使用 git 或 svn 并且人们使用相同的 xcode 项目文件并且他们不想为每个用户更改方案,你怎么能这样做。 @nepete 你能告诉我为什么每次我们尝试用 c++ 打开一个新文件时都必须这样做吗? @user11954047,首先了解工作区、项目、目标和方案之间的区别可能会有所帮助。这是good explanation。此线程中的bames53's answer 也可能会有所帮助。 此选项在 XCode 11 中不可用【参考方案2】:

这是一种完全不同的方法:让 Xcode 为您复制输入文件。

在 Xcode 中选择您的项目 选择构建阶段 点击“+”按钮创建一个新的构建阶段

选择新建复制文件构建阶段

选择产品目录 点击“+”按钮添加文件

点击添加其他

选择您的输入文件并点击打开

选中复制项目...复选框并点击完成

现在每次构建项目时,输入文件都将被复制到与可执行文件相同的文件夹中,无论它是在哪里构建的。当然,要查看输出文件,您仍然需要在 Finder 中找到可执行文件。

【讨论】:

最佳答案在这里!谢谢! 我可以用这个解决方案访问我的文件! 再次在 xCode IDE 中更进一步!谢谢!【参考方案3】:

答案并不能真正解释问题,所以我想我会这样做。

当您将“inputFile.txt”之类的相对路径传递给文件 API 时,在执行程序时,它会被视为相对于工作目录。当您使用 cmd.exe 或 Terminal.app 或一般命令行时,这与“工作目录”相同。 Unix 命令pwd(“打印工作目录”)显示当前工作目录。在 Windows 上运行不带参数的命令 cd 执行相同的功能。 (在 Unix 上运行 cd 且不带参数会将工作目录更改为用户的主目录。)

当您从命令行运行程序时,命令行 shell 会设置程序的工作目录。当您从 IDE 中运行程序时,IDE 会设置工作目录。由于与命令行不同,对于 IDE 应将什么设置为工作目录没有明显的答案,因此 Visual Studio 和 Xcode 默认将工作目录设置为不同的位置:Visual Studio 将工作目录设置为 $(ProjectDir),该目录包含 Visual Studio 项目文件; Xcode 将工作目录设置为构建产品目录,即可执行文件写入的位置。

您的问题的一些可能解决方案是:

    不要使用相对路径,因此不要依赖于工作目录。这对使程序更具可移植性没有多大帮助,因为平台之间的绝对路径也会有所不同,因此您仍然必须为每个平台“配置”程序。事实上,使用绝对路径更糟糕,因为这意味着您的源代码必须不同,而最好将这种差异限制在每个平台的构建配置中。

    配置 IDE 以使用所需的工作目录。可以通过右键单击项目来配置 Visual Studio,选择配置属性 > 调试 > 工作目录,并将工作目录设置为所需的路径(可能使用 Visual Studio 构建变量)。

    nepete's answer描述了如何配置Xcode直接设置的工作。

    配置 IDE 的构建过程以将数据文件复制到适当的位置。在 Visual Studio 中,您可以在 C++ 项目中通过配置项目的属性 > 配置属性 > 生成事件来执行此操作。

    SSteve's answer 介绍了如何在 Xcode 中配置额外的构建步骤。

【讨论】:

【参考方案4】:

我猜你在包含你的源代码的文件夹中有 inputFile.txt。那是行不通的。您需要将其放在包含生成的可执行文件的文件夹中。要找到该文件夹​​,请在 Products 下右键单击您的应用,然后选择 Show In Finder

此图像显示了命令行程序的外观。它还显示已打开的 Finder 窗口。如您所见,它与包含源代码的文件夹不同。

【讨论】:

好的,它和我的源代码在同一个文件夹中,但是我对你的意思有点困惑。我在“products”文件夹的finder中点击了show,它只找到了一个文件,我的源代码所在的文件已经是……我做错了什么吗? 文件夹不要右键,打开文件夹右键文件夹中的项目。我添加了一个屏幕截图,显示了命令行程序的外观(在本例中称为asdf)。【参考方案5】:

按照 nepete 的建议,编辑方案,但使用 $PROJECT_DIR 作为自定义工作目录。帮助移动项目,或在两种不同的环境(例如家庭和办公室)中工作。

顺便说一句。 $PROJECT_DIR 是 Xcode 环境变量之一,还有助于将文件名作为命令行参数传递给程序(可在方案中的“参数”下设置)。

【讨论】:

【参考方案6】:

我今天也遇到了同样的问题。我想将 C 代码添加到我的 Swift 项目中,而我的文件指针始终为 NULL。

不幸的是,在 XCode 9 for iOS 应用程序中,我无法更改工作目录。更改构建阶段也对我没有帮助。经过 4 多个小时的反复试验,这就是我最终想出的方法:

    在将文件复制到 XCode 时,我选择了“创建组”,但我需要选择“创建文件夹引用”:

    我创建了一个新的 Objective-c 文件 (.m) 并将我的所有 C 代码复制到那里。

    我没有修改 .h 文件(XCode 生成的桥接头和我自己的带有公共函数声明的 .h 文件)。现在我的项目结构如下所示:

    在我的 dict.m 文件中代替之前的纯 c fopen 部分:

    FILE *dic = fopen("dictionary.txt", "r");
    

    我添加了 obj-C 代码:

    NSString *filePath = [[NSBundle mainBundle] pathForResource:@"dictionary" ofType:@"txt"];
    FILE *dic = fopen([filePath cStringUsingEncoding: NSUTF8StringEncoding], "r");
    

它现在可以正常工作了!真是太棒了!

ps 我决定写下这个答案,以防它对像我这样的人有所帮助并节省他们一些时间。如果您知道如何在 XCode 9 for iOS 中更改工作目录,请给我留言 - 现在我真的很好奇为什么我找不到它。

【讨论】:

以上是关于Xcode 新手无法在 C++ 中打开文件?的主要内容,如果未能解决你的问题,请参考以下文章

在 xcode 5 中打开项目后无法在 xcode 4.6.3 中打开情节提要文件

由于找不到文件错误,无法在 Visual Studios 中运行 C++ 代码 [重复]

无法在 Xcode 中打开数据模型文件

无法在 XCode 4.3.2 中打开较旧的 .xcodeproj 文件

无法在 xCode 6 或更高版本中打开故事板或 xib 文件

无法在 Xcode 中打开项目