0

我正在尝试使用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]?这个问题的其他解决方案也将被接受。

4

2 回答 2

4

您需要使用splitpath或类似方法从argv[0]. 你不能chdir到一个文件。

[编辑] 对不起,我认为splitpath是 Windows 的事情......只要这样做:

char *dirsep = strrchr( argv[0], '/' );
if( dirsep != NULL ) *dirsep = 0;

现在argv[0]已被修剪以删除可执行文件名称。

请注意,命令行可能根本不包含任何目录。


通过尝试这个,你有点打破了整个 Linux(我假设)范式......你不应该知道你的可执行文件存储在哪里。通常,您可以通过以下方式之一指定输出:

  1. 在配置文件中(例如,可能保存在/usr/local/etc,或用户的主目录中,或在命令行中给出);

  2. 使用命令行选项;

  3. 写入标准输出。

于 2012-12-14T02:59:15.953 回答
1

因为 argv[0] 有当前脚本的路径,包括当前脚本。因此,您需要修剪最后一个路径分隔符(“/”、“:”或“\”,具体取决于您的平台)之后的所有内容,并将结果传递chdir。

于 2012-12-14T07:28:36.563 回答