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

uxhixvfz  于 2022-11-18  发布在  其他
关注(0)|答案(6)|浏览(221)

我一直在使用窗口在一个类我一直在采取,但我试图运行一个基本的代码,以找出如何打开/关闭/输入/输出的文件在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;

}
kupeojn6

kupeojn61#

将.txt文件放在main.cpp文件所在的同一目录中(或任何您喜欢的位置)。
在Xcode中,进入产品〉方案〉编辑方案〉运行(左侧)〉选项(顶部中间)
在“工作目录”选项下,选中“使用自定义工作目录”,并将其设置为.txt文件所在的目录。

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

tzcvj98z

tzcvj98z2#

这里有一个完全不同的方法:让Xcode为您拷贝输入文件。

  • 在Xcode中选择项目
  • 选择生成阶段
  • 单击“+”按钮创建新的生成阶段

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

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

  • 单击添加其他

  • 选择输入文件并单击打开


指令集

  • 选中**复制项目...**复选框,然后单击完成

现在,每当您构建项目时,输入文件都会被复制到可执行文件所在的文件夹中,而不管它是在何处构建的。当然,要查看输出文件,您仍然需要在Finder中找到可执行文件。

muk1a3rh

muk1a3rh3#

答案并不能真正解释问题,所以我想我会这样做。
当你传递一个相对路径比如“inputFile.txt”给文件API时,当程序被执行时,它被当作相对于 * 工作目录 *。这和你使用cmd.exe或www.example.com或一般的命令行时的“工作目录”是一样Terminal.app的。Unix命令pwd(“打印工作目录”)显示当前工作目录。在Windows上运行不带参数的命令cd执行相同的功能。(在Unix上,运行不带参数的cd会将工作目录更改为用户的主目录。)
当您从命令行运行程序时,命令行shell会设置程序的工作目录。当您从IDE中运行程序时,IDE会设置工作目录。与命令行不同,IDE应该将什么设置为工作目录并没有明确的答案,因此Visual Studio和Xcode默认情况下会将工作目录设置为不同的位置:VisualStudio将工作目录设置为$(ProjectDir),该目录包含VisualStudio项目文件; Xcode将工作目录设置为构建产品目录,即写入可执行文件的位置。
以下是一些可能的问题解决方案:
1.不要使用相对路径,因此不要依赖于工作目录。这对程序的可移植性没有多大帮助,因为绝对路径在不同的平台上也是不同的,所以你仍然需要为每个平台“配置”程序。事实上,使用绝对路径更糟糕,因为这意味着你的源代码必须不同。而最好将这种差异限制在每个平台的构建配置中。
1.将IDE配置为使用所需的工作目录。可以通过以下方法配置Visual Studio:右键单击项目,选择“配置属性”〉“调试”〉“工作目录,”然后将工作目录设置为所需的路径(可能使用Visual Studio生成变量)。
nepete's answer说明如何配置Xcode直接设置的工作。
1.配置IDE的生成过程以将数据文件复制到适当的位置。在Visual Studio中,可以通过配置项目的“属性”〉“配置属性”〉“生成事件”在C++项目中执行此操作。
SSteve's answer介绍了如何在Xcode中配置其他构建步骤。

93ze6v8z

93ze6v8z4#

我猜你在包含源代码的文件夹中有inputFile.txt。这是行不通的。你需要把它放在包含生成的可执行文件的文件夹中。要找到该文件夹,请右键单击产品下的应用,然后选择在Finder中显示

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

b09cbbtk

b09cbbtk5#

按照nepete的建议,编辑方案,但是使用$PROJECT_DIR作为自定义工作目录。这有助于移动项目,或者在两个不同的环境中工作(例如,家庭和办公室)。
顺便说一句,$PROJECT_DIR是Xcode环境变量之一,也有助于将文件名作为命令行参数传递给程序(可在方案中的“参数”下设置)。

isr3a4wc

isr3a4wc6#

今天我也遇到了同样的问题,我想把C代码添加到我的Swift项目中,但是我的文件指针总是空的。
不幸的是,在XCode 9 for iOS应用程序中,我无法更改工作目录。更改构建阶段也没有帮助我。经过4个多小时的反复试验,这是我最后想到的,它起作用了:
1.在将文件复制到XCode时,我选择了“创建组”,但我需要选择“创建文件夹引用”:

1.我创建了一个新的objective-c文件(.m),并将我所有的C代码复制到那里。
1.我没有修改.h文件(XCode生成的桥接头文件和我自己的带有公共函数声明的.h文件)。

1.在我的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的iOS中更改工作目录,请给我留下评论-现在我真的很好奇为什么我找不到它。

相关问题