stat() 在 C++ 中找不到文件
Posted
技术标签:
【中文标题】stat() 在 C++ 中找不到文件【英文标题】:stat() doesn't find a file in c++ 【发布时间】:2012-10-22 16:52:04 【问题描述】:在 Linux 12.04 上 我有一个可执行文件位于说:
/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;
【问题讨论】:
请发布您正在使用的stat()
电话。
并且至少使用perror
通知用户任何失败的系统调用。
准确地说,调用失败时strFilename.c_str()
的值是多少?您可以通过将 perror(strFilename.c_str())
放在 else
语句中来发现这一点。
【参考方案1】:
在第一种情况cd ..., run exe
在执行程序之前更改当前工作目录,在第二种情况下,您在不更改当前工作目录的情况下启动 exe,我认为在您的程序中您使用相对路径来打开您的配置(例如 @ 987654322@ 或只是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
【讨论】:
我这样做了,但我仍然收到错误...它无法再次找到该文件以上是关于stat() 在 C++ 中找不到文件的主要内容,如果未能解决你的问题,请参考以下文章
在 Visual Studio C++ 2010 中找不到或打开 PDB 文件