我正在尝试以下列方式使用 chdir()
将当前工作目录更改为可执行文件的路径:
#include <iostream>
#include <string>
using namespace std;
int main(int argc,char *argv[]) {
if(chdir(argv[0]) == 0) printf("In %s\n", argv[0]);
else printf("Failed to change directory\n");
}
输出是:
Failed to change directory
为什么 chdir
不能与 argv[0]
一起工作?此问题的其他解决方案也将被接受。
您需要使用 splitpath
或类似工具从 argv[0]
中删除可执行文件的名称。您不能 chdir
到一个文件。
[edit] 抱歉,我认为 splitpath
是 Windows 的东西...只需这样做:
char *dirsep = strrchr( argv[0], '/' );
if( dirsep != NULL ) *dirsep = 0;
现在 argv[0]
已被修剪以删除可执行文件名称。
请注意,命令行可能根本不包含任何目录。
您尝试这样做有点破坏了整个 Linux(我假设)范式...您不必知道可执行文件的存储位置。通常,您可以通过以下方式之一指定输出:
在配置文件中(例如可能保存在 /usr/local/etc
中,或用户的主目录,或在命令行中给出);
使用命令行选项;
写入标准输出。
我是一名优秀的程序员,十分优秀!