C++ argv不适用于chdir
我正试图通过以下方式使用C++ argv不适用于chdir,c++,argv,chdir,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\
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");
}
为什么
chdir
不能与argv[0]
一起工作?此问题的其他解决方案也将被接受。您需要使用splitpath
或类似方法从argv[0]
中删除可执行文件的名称。您不能chdir
到文件
[编辑]抱歉,我认为拆分路径
是Windows的东西。。。只要这样做:
char *dirsep = strrchr( argv[0], '/' );
if( dirsep != NULL ) *dirsep = 0;
现在,argv[0]
已被修剪以删除可执行文件名
请注意,命令行可能根本不包含任何目录
通过尝试以下内容,您在某种程度上打破了整个Linux(我想)的范式。。。您不必知道可执行文件存储在哪里。通常,可以通过以下方式之一指定输出:
/usr/local/etc
或用户的主目录中,或在命令行中给出)您需要使用
splitpath
或类似工具从argv[0]
中删除可执行文件的名称。您不能chdir
到文件
[编辑]抱歉,我认为拆分路径
是Windows的东西。。。只要这样做:
char *dirsep = strrchr( argv[0], '/' );
if( dirsep != NULL ) *dirsep = 0;
现在,argv[0]
已被修剪以删除可执行文件名
请注意,命令行可能根本不包含任何目录
通过尝试以下内容,您在某种程度上打破了整个Linux(我想)的范式。。。您不必知道可执行文件存储在哪里。通常,可以通过以下方式之一指定输出:
/usr/local/etc
或用户的主目录中,或在命令行中给出)因为argv[0]具有指向当前脚本(包括当前脚本)的路径。因此,您需要修剪最后一个路径分隔符(“/”、“:”或“\”(取决于您的平台)后面的所有内容,并将结果传递给chdir。,因为argv[0]具有指向当前脚本(包括当前脚本)的路径。因此,您需要修剪最后一个路径分隔符(“/”、“:”或“\”,具体取决于您的平台)之后的所有内容,并将结果传递给chdir。您提供了哪些命令行参数?您正在将目录更改为可执行文件?为什么?在这种情况下,我要做的下一件事是先打印
argv[0]
。当然,调试它并检查argv
中包含的值也很有效。我希望我的可执行文件能够从它自己的路径创建新文件,而不是shell的路径argv[1]也会失败@RetiredInjahelpful链接?您提供了什么命令行参数?您正在将目录更改为可执行文件?为什么?在这种情况下,我要做的下一件事是先打印argv[0]
。当然,调试它并检查argv
中包含的值也很有效。我希望我的可执行文件能够从它自己的路径创建新文件,而不是shell的路径argv[1]也会失败@RetiredInjahelpful链接?有没有内置的函数可以做到这一点?实际上,我认为,splitpath
是Windows的东西。很抱歉看,你可以只做strrchr(argv[0],“/”)。如果不为null,则将返回指针处的字符设置为0。现在,argv[0]
包含一个路径。是否有任何内置函数可以这样做?实际上,我认为,splitpath
是Windows的东西。很抱歉看,你可以只做strrchr(argv[0],“/”)。如果不为null,则将返回指针处的字符设置为0。现在,argv[0]
包含一个路径。