joe*_*_04 6 c++ terminal xcode redirect
标题有点啰嗦,但基本上,我写了一个应用程序,读取和写入其输入和输出到文本文件.整个时间,它会直接在与我的Xcode派生数据 - > project-> build-> products-> debug文件夹相同的目录中读取和写入文件.这是写入和读取所有内容的地方.我没有为应用程序设置自定义路径,因此只需保存应用程序所在的位置即可.有史以来第一次,我运行Apple的Instruments应用程序,试图学习如何使用分析器.在选择此应用程序作为Instruments中的目标后不久,我又回到了Xcode应用程序来运行该程序.在Xcode中一切正常.它从文件中读取并打印到与文件夹相同位置的文件,但是如果我尝试通过单击文件并使其打开终端来运行实际程序本身,则它不再读取或打印到应用程序所在的目录相反,它从我的主文件夹打印和读取.我不知道是什么改变了或是什么导致它改变,但我希望它是一个简单的修复.我希望应用程序能够从文件中读取文件并从其所在的目录中打印文件.我不确定它是Xcode设置还是终端设置.
任何帮助将不胜感激.
更新1:尝试没有运气:
目录字段是空白的,所以我认为这将是解决方案,但填写它的建议没有做任何事情来缓解这个问题.
更新2:
刚刚尝试删除首选项文件,仍然没有解决方案.我愿意给别人一个声誉.我没有很多,因为我是一个新成员,但我会给那个人认为是公平的,给予解决它的人.我很绝望,真的不想等待2天才能解决这个问题.
更新3:
尝试将方案部分的"配置文件(发布) - >选项区域中的默认路径更改为更新1中建议的默认变量.没有运气.我开始失去理智.
更新4:
我已经尝试完全删除该方案并制作一个新方案,希望可能存在一些与该方案混淆的东西,但这并没有解决问题.在Xcode中运行应用程序时的输入和输出仍在使用工作目录,而在调试文件夹中运行可执行文件则使用主文件夹.
更新5:
刚刚在旧的iMac和Xcode设置(OS 10.8.5和Xcode 5.1.1)上测试了它,它似乎正常工作,读取和写入调试文件夹中应用程序的当前工作目录.
无论出于何种原因, /sf/answers/1087620551/建议的解决方案不再有效。也许在 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;
}
Run Code Online (Sandbox Code Playgroud)