我有一个可执行文件,位于:
/a/b/exe
和
上的配置文件/a/b/config
做的时候:
cd /a/b/
./exe
一切正常,stat函数在/ a / b /
上找到文件配置但是,从root运行时
/a/b/exe
stat没有找到配置文件
任何想法为什么?
这使得无法使用未从exe文件夹运行的脚本运行二进制文件。
电话看起来像这样:
struct stat stFileInfo;
bool blnReturn;
int intStat;
// Attempt to get the file attributes
intStat = stat(strFilename.c_str(),&stFileInfo);
if(intStat == 0) {
// We were able to get the file attributes
// so the file obviously exists.
blnReturn = true;
} else {
// We were not able to get the file attributes.
// This may mean that we don't have permission to
// access the folder which contains this file. If you
// need to do that level of checking, lookup the
// return values of stat which will give you
// more details on why stat failed.
blnReturn = false;
}
答案 0 :(得分:2)
在第一种情况cd ..., run exe
中,您在执行程序之前更改当前工作目录,在第二种情况下,您启动exe而不更改当前工作目录,我认为在您的程序中您使用相对路径来打开您的配置(对于示例./config
或仅config
),它无法从当前工作目录中找到它。最简单的解决方法是在应用程序启动时更改工作目录:
int main(int argc, char** argv) {
std::string s( argv[0] ); // path to the program
std::string::size_type n = s.rfind( '/' );
if( n != std::string::npos ) {
std::system( ("cd " + s.substr(0, n)).c_str() );
}
// rest of your code
}