argv不适用于chdir

时间:2012-12-14 02:56:37

标签: c++ argv chdir

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

2 个答案:

答案 0 :(得分: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. 写入标准输出。

答案 1 :(得分:1)

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