标题有点啰嗦,但基本上,我写了一个应用程序,可以读取和写入输入和输出到文本文件。整个时间,它会直接在与我的Xcode派生数据 - > project-> build-> products-> debug文件夹相同的目录中读取和写入文件。这是写入和读取所有内容的地方。我没有为应用程序设置自定义路径,因此只需保存应用程序所在的位置即可。有史以来第一次,我运行Apple的Instruments应用程序,试图学习如何使用分析器。在选择此应用程序作为Instruments中的目标后不久,我又回到了Xcode应用程序来运行该程序。在Xcode中一切正常。它从文件中读取并打印到与文件夹相同位置的文件,但是如果我尝试通过单击文件并使其打开终端来运行实际程序本身,则它不再读取或打印到应用程序所在的目录相反,它从我的主文件夹打印和读取。我不知道是什么改变了或是什么导致它改变,但我希望它是一个简单的修复。我希望应用程序能够从文件中读取文件并从其所在的目录中打印文件。我不确定它是Xcode设置还是终端设置。
非常感谢任何帮助。
更新1:试了这个没有运气:
how to change the working directory to the location of the program
目录字段是空白的,所以我认为这是解决方案,但填写建议并没有解决问题。
更新2:
刚试过删除首选项文件,仍然没有解决方案。我愿意给别人一个声誉。我没有很多,因为我是一个新成员,但我会给那个人认为是公平的,给予解决它的人。我很绝望,真的不想等待2天才能解决这个问题。
更新3:
尝试将方案部分中的“个人资料(发布) - >选项区域中的默认路径更改为更新1中建议的默认变量。没有运气。我开始失去理智。
更新4:
我已经尝试完全删除该计划并制作一个新计划,希望可能会有一些与该计划混淆的东西,但这并没有解决问题。在Xcode中运行应用程序时的输入和输出仍在使用工作目录,而在调试文件夹中运行可执行文件则使用主文件夹。
更新5:
刚刚在旧的iMac和Xcode设置(OS 10.8.5和Xcode 5.1.1)上进行了测试,它似乎正常工作,在调试文件夹中读取和写入应用程序的当前工作目录。
答案 0 :(得分:1)
无论出于何种原因,https://stackoverflow.com/a/15537436/1035008建议的解决方案不再有效。也许在Xcode 8.1中被打破了。但这似乎有效:
#include <iostream>
#include <fstream>
#include <unistd.h>
using namespace std;
int main (int argc, const char * argv[])
{
// argv[0] returns the full path to the program, in my case "/Users/yuchen/Library/Developer/Xcode/DerivedData/../Debug/test
string directory(argv[0]);
// And we want to get rid of the program name `test`
directory = directory.substr(0, directory.find_last_of("/"));
// Point the directory to the program directory
chdir(directory.c_str());
cout << "Current directory is: " << getcwd(NULL, 0) << endl; // /Users/yuchen/Library/Developer/Xcode/DerivedData/../Debug/
ifstream fin("hi.txt");
if (fin.is_open()) cout << "File is Open" << endl;
else cout << "File is not open" << endl;
fin.close();
return 0;
}