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;
【问题讨论】:
也 #includeinputFile.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 4.3.2 中打开较旧的 .xcodeproj 文件