给定路径的文件的存在性

发布于 2024-12-04 20:19:49 字数 47 浏览 0 评论 0原文

给定路径,有没有办法在不打开文件的情况下查出文件是否存在?

谢谢

Given the path, is there a way to find out whether the file exists without opening the file?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

懵少女 2024-12-11 20:19:49

最有效的方法是访问带有 F_OK 标志。

stat 也可以工作,但它的重量要重得多,因为它必须读取 inode 内容,而不仅仅是目录。

The most efficient way is access with the F_OK flag.

stat also works but it's much heavier weight since it has to read the inode contents, not just the directory.

旧时浪漫 2024-12-11 20:19:49

您可以使用 stat 系统调用。请确保检查 errno 是否有正确的错误,因为 stat 可能会因许多其他原因/故障而返回 -1

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
main()
{
        struct stat BUF;
        if(stat("/Filepath/FileName",&BUF)==0)
        {
                printf("File exists\n");
        }
}

另一种方法是使用 access 函数。

#include <unistd.h>

main()
{
        if(access("/Filepath/FileName", F_OK) != -1 ) 
        {
               printf("File exists\n");
        } 
        else 
        {
               printf("File does not exist\n");
        }       
}

You can use the stat system call. Make sure though that you check errno for the correct error because stat may return -1 for a number of other reasons/Failures.

#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
main()
{
        struct stat BUF;
        if(stat("/Filepath/FileName",&BUF)==0)
        {
                printf("File exists\n");
        }
}

Another way is by using the access function.

#include <unistd.h>

main()
{
        if(access("/Filepath/FileName", F_OK) != -1 ) 
        {
               printf("File exists\n");
        } 
        else 
        {
               printf("File does not exist\n");
        }       
}
花开雨落又逢春i 2024-12-11 20:19:49
#include <sys/types.h>
#include <sys/stat.h>
#include <unistd.h>
#include <errno.h>

int rc;
struct stat mystat;
rc = stat(path, &mystat);

现在检查 rc 和(也许)errno。

编辑2011-09-18附录:

如果路径指向非文件(目录、fifo、符号链接等),则 access() 和 stat() 都返回 0

在 stat() 情况下,可以使用“( (st_mode & S_IFREG) == S_IFREG)”。
最好的方法仍然是尝试使用 open() 或 fopen() 打开文件。

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

int rc;
struct stat mystat;
rc = stat(path, &mystat);

Now check rc and (maybe) errno.

EDIT 2011-09-18 addendum:

Both access() and stat() return 0 if the path points to a non-file (directory, fifo,symlink, whatever)

In the stat() case, this can be tested with "((st_mode & S_IFREG) == S_IFREG)".
Best way still is to just try to open the file with open() or fopen().

黎歌 2024-12-11 20:19:49

尝试删除它(unlink())。如果成功的话,它就不再存在了。如果不成功,
解释 errno 看看它是否存在:)

Try to remove it (unlink()). If successful, it doesn't exist anymore. If unsuccessful,
interpret errno to see if it exists :)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文