【发布时间】:2012-10-24 21:34:18
【问题描述】:
我想使用 c++ 在 Mac OS 上打开文件。
如果我在Xcode下运行程序,工作目录和程序一样,没问题。但是,如果我尝试在终端中运行程序,工作目录总是“用户/用户名”。你知道如何将工作目录更改为程序所在的位置吗?
这里是示例代码:
#include <iostream>
#include <fstream>
using namespace std;
int main (int argc, const char * argv[])
{
char * dir = getcwd(NULL, 0);
cout << "Current dir: " << dir << endl;
ifstream fin("hi.txt");
if (fin.is_open()) cout << "File is Open" << endl;
else cout << "File is not open" << endl;
fin.close();
return 0;
}
【问题讨论】:
-
为什么要程序使用自己的安装目录作为当前目录?它可能无法在那里写入(如果软件安装正确)。它可能能够更方便地读取文件,但这是值得商榷的。 OTOH,如果我从
$HOME/src/subdir/myprogram启动程序,我希望指定相对于我启动它的目录的文件名,而不是相对于/Applications/Doohickey.app/Contents/MacOS或$HOME或类似的东西。当然,这取决于程序的作用……但请谨慎使用chdir()。 -
我只想把所有文件放在一起。我以前经常使用windows。当我在windows下运行命令行程序时,该程序生成的文件应该与程序位于同一位置。我明白你的意思。我会考虑一下。非常感谢。
-
请记住,Windows 主要不是一个多用户系统,对于每个用户来说,并没有一个类似于 Unix 主目录的目录。这会导致程序将数据分散到各处。在类 Unix 系统上,建议将数据存储在 $HOME 下。例如,配置信息可能在文件(或目录)
$HOME/.yourapp中。查看 Apple 的“OS X 人机界面指南”,了解在 Mac OS X 上的位置。 -
我在这里遇到了类似的问题,无法根据此解决方案进行修复。我迫切需要一个解决方案,并会以一些声誉来弥补。 stackoverflow.com/questions/40920783/…
-
还提供赏金给任何可以帮助我修复它的人。