为了账号安全,请及时绑定邮箱和手机立即绑定

检查C中是否存在文件的最佳方法是什么?

检查C中是否存在文件的最佳方法是什么?

C
慕仙森 2019-06-25 16:18:36
检查C中是否存在文件的最佳方法是什么?有比简单地打开文件更好的方法吗?int exists(const char *fname){     FILE *file;     if ((file = fopen(fname, "r")))     {         fclose(file);         return 1;     }     return 0;}
查看完整描述

3 回答

?
炎炎设计

TA贡献1808条经验 获得超4个赞

查找access()功能,在unistd.h..您可以用

if( access( fname, F_OK ) != -1 ) {
    // file exists} else {
    // file doesn't exist}

您也可以使用R_OKW_OK,和X_OK代替F_OK要检查读取权限、写权限和执行权限(分别),而不是是否存在,您可以同时检查其中的任何一个(即检查这两个读取权限)。使用R_OK|W_OK)

更新:请注意,在Windows上,您不能使用W_OK为了可靠地测试写权限,因为访问函数不考虑DACL。access( fname, W_OK )可能返回0(成功),因为该文件没有只读属性集,但您可能仍然没有写入该文件的权限。


查看完整回答
反对 回复 2019-06-25
?
慕尼黑8549860

TA贡献1818条经验 获得超11个赞

这样使用STAT:

int file_exist (char *filename){
  struct stat   buffer;   
  return (stat (filename, &buffer) == 0);}

就这样叫它:

if (file_exist ("myfile.txt")){
  printf ("It exists\n");}


查看完整回答
反对 回复 2019-06-25
?
回首忆惘然

TA贡献1847条经验 获得超11个赞

通常,当您想要检查文件是否存在时,这是因为您想创造如果不是的话,那份文件。格雷姆·珀罗的答案是好的,如果你想要创建该文件,但如果要创建该文件,则很容易受到竞争条件的影响:另一个进程可以在您之间创建该文件,检查它是否存在,然后实际打开该文件以便将其写入该文件。(别笑.这可能是坏的如果创建的文件是一个符号链接,则会产生安全问题!)

如果你想确认是否存在如果该文件不存在,则创建该文件,原子化这样就没有比赛条件,然后使用以下方法:

#include <fcntl.h>#include <errno.h>fd = open(pathname, O_CREAT | O_WRONLY | O_EXCL, S_IRUSR | S_IWUSR);if (fd < 0) {
  /* failure */
  if (errno == EEXIST) {
    /* the file already existed */
    ...
  }} else {
  /* now you can use the file */}


查看完整回答
反对 回复 2019-06-25
  • 3 回答
  • 0 关注
  • 1046 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信