给定路径的文件的存在性
给定路径,有没有办法在不打开文件的情况下查出文件是否存在?
谢谢
Given the path, is there a way to find out whether the file exists without opening the file?
Thanks
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
最有效的方法是
访问
带有F_OK
标志。stat
也可以工作,但它的重量要重得多,因为它必须读取 inode 内容,而不仅仅是目录。The most efficient way is
access
with theF_OK
flag.stat
also works but it's much heavier weight since it has to read the inode contents, not just the directory.您可以使用 stat 系统调用。请确保检查
errno
是否有正确的错误,因为stat
可能会因许多其他原因/故障而返回-1
。另一种方法是使用 access 函数。
You can use the stat system call. Make sure though that you check
errno
for the correct error becausestat
may return-1
for a number of other reasons/Failures.Another way is by using the access function.
现在检查 rc 和(也许)errno。
编辑2011-09-18附录:
如果路径指向非文件(目录、fifo、符号链接等),则 access() 和 stat() 都返回 0
在 stat() 情况下,可以使用“( (st_mode & S_IFREG) == S_IFREG)”。
最好的方法仍然是尝试使用 open() 或 fopen() 打开文件。
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().
尝试删除它(unlink())。如果成功的话,它就不再存在了。如果不成功,
解释 errno 看看它是否存在:)
Try to remove it (unlink()). If successful, it doesn't exist anymore. If unsuccessful,
interpret errno to see if it exists :)