Argv 不适用于 CHDIR

argv does not work with chdir

本文关键字:CHDIR 适用于 不适用 Argv      更新时间:2023-10-16

我正在尝试将当前工作目录更改为可执行文件的路径,使用以下方式使用chdir()

#include <iostream>
#include <string>
using namespace std;
int main(int argc,char *argv[]) {
    if(chdir(argv[0]) == 0) printf("In %sn", argv[0]);
        else printf("Failed to change directoryn");
}

输出为:

Failed to change directory

为什么chdir不适用于argv[0]?这个问题的其他解决方案也将被接受。

您需要

使用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. 写入标准输出。

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