3

我们可以使用stat文件的相对路径来检查文件是否存在吗?当我使用它时,我总是得到负面的结果。

4

3 回答 3

3

此代码显示r=0为输出:

#include <iostream>
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>


int main()
{
    struct stat buf;
    int r = stat("../junk", &buf);
    std::cout << "r=" << r << std::endl;
}

输出ls -l ..(减少以仅显示相关目录):

$ ls -l ../
drwxr-xr-x  6 username group  12288 Aug 27 09:48 junk
于 2013-08-27T08:51:33.520 回答
0

使用相对路径名调用 stat 没有问题。不太确定“负面结果”是什么意思,值得检查返回的实际错误并检查您是否具有(例如)检查相关文件的权限

于 2013-08-27T08:55:26.190 回答
0

stat路径的所有组件都必须存在并且在被调用时可以按原样遍历。这意味着,例如,这将起作用:

stat("direxists/../file_exists", &stat_struct);

虽然这不会:

stat("dirnotexist/../file_exists", &stat_struct);

即使dirnotexist/../file_exists可以归一化为 yield ./file_exists。第二次调用将产生一个 ENOENT 错误。有关详细信息,请参见此处:https ://linux.die.net/man/2/stat

于 2020-08-12T21:21:15.470 回答