我一直在使用我一直在使用的类中的窗口但我正在尝试运行一个基本代码来弄清楚如何从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;
}
答案 0 :(得分:66)
将.txt文件放在main.cpp文件所在的目录中(或任何您喜欢的位置)。
在Xcode中转到产品&gt;方案&gt;编辑方案&gt;运行测试(右侧)&gt;选项(中间顶部)
在“选项”下,选中“使用自定义工作目录”并将其设置为.txt文件所在的目录。
要处理这些文件,您只需指定文件名,例如in_file.open( “inputFile.txt”);没有道路是必要的。
答案 1 :(得分:25)
这是一种完全不同的方法:让Xcode为您复制输入文件。
现在,每次构建项目时,输入文件都将被复制到与可执行文件相同的文件夹中,无论它在何处构建。当然,要查看输出文件,您仍需要在Finder中找到可执行文件。
答案 2 :(得分:4)
答案并没有真正解释问题所以我认为我会这样做。
当您将类似“inputFile.txt”的相对路径传递给文件API时,在执行程序时,它被视为相对于工作目录。当您使用cmd.exe或Terminal.app或命令行时,这与“工作目录”相同。 Unix命令pwd
(“打印工作目录”)显示当前工作目录。在Windows上运行不带参数的命令cd
执行相同的功能。 (在没有参数的情况下运行cd
的Unix会将工作目录更改为用户的主目录。)
从命令行运行程序时,命令行shell将设置程序的工作目录。从IDE中运行程序时,IDE将设置工作目录。因为,与命令行不同,IDE不应该设置为工作目录,Visual Studio和Xcode默认将工作目录设置为不同的位置:Visual Studio将工作目录设置为$(ProjectDir)
,包含Visual Studio项目文件的目录; Xcode将工作目录设置为构建产品目录,即可执行文件写入的位置。
您的问题的一些可能解决方案是:
不要使用相对路径,因此不依赖于工作目录。这对于使程序更具可移植性没有太大帮助,因为平台之间的绝对路径也不同,因此您仍然必须为每个平台“配置”程序。实际上使用绝对路径更糟糕,因为这意味着您的源代码必须不同,而最好将这种差异限制在每个平台的构建配置中。
配置IDE以使用所需的工作目录。右键单击项目,选择配置属性&gt;可以配置Visual Studio。调试&gt;工作目录,并将工作目录设置为所需的路径(可能使用Visual Studio构建变量)。
nepete's answer描述了如何配置由Xcode直接设置的工作。
配置IDE的构建过程,将数据文件复制到适当的位置。在Visual Studio中,您可以通过配置项目的属性&gt;在C ++项目中执行此操作。配置属性&gt;建立活动。
SSteve's answer介绍了如何在Xcode中配置其他构建步骤。
答案 3 :(得分:2)
根据nepete的建议,编辑方案,但使用$ PROJECT_DIR作为自定义工作目录。帮助移动项目,或在两个不同的环境中工作(例如,家庭和办公室)。
顺便说一句。 $ PROJECT_DIR是Xcode环境变量之一,也有助于将文件名作为命令行参数传递给程序(可在方案中的“Arguments”下设置)。
答案 4 :(得分:0)
我猜你在包含源代码的文件夹中有inputFile.txt。那不行。您需要将其放在包含生成的可执行文件的文件夹中。要查找该文件夹,请在产品下右键单击您的应用,然后选择在Finder中显示。
此图显示了命令行程序的外观。它还显示已打开的Finder窗口。如您所见,它与包含源代码的文件夹不同。
答案 5 :(得分:0)
我今天遇到了同样的问题。我想将C代码添加到我的Swift项目中,我的文件指针始终为NULL。
不幸的是,在iOS应用的XCode 9中,我无法更改工作目录。改变构建阶段对我也没有帮助。经过4个多小时的反复试验,这就是我最终想出来的结果并且有效:
我创建了一个新的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中的工作目录,请给我留言 - 现在我真的很好奇为什么我找不到它。