C++(五) access函数判断文件是否存在

原创 2012年06月07日 22:38:36

最近看到一个函数,第一眼觉得很sb,因为remove的定义在if内部,变成了局部变量,结果如果文件“234.bin”不存在的话,一定会出错的,因为remove的生存期有限。

结果,亮瞎我的眼:

#include<iostream>
#include "unistd.h"
#include "stdio.h"
#include "stdlib.h"

using namespace std;

int main()
{  
    if(access("234.bin",F_OK))
    {
       bool remove=true;
    }

    if(remove)
    {
        cout<<"Need to delete..."<<endl;
    }
    return 0;
}
结果各种悲剧,无论这个文件是否存在:


事实上,我个人认为这个问题出在这个access函数的返回值上,它的返回值是

0    如果文件是指定的mode

-1   如果出错

所以上述程序,无论是找到文件(0),还是找不到(-1),都是false,所以应该是永远都进不了if(remove)的。。

所以应该是:

if(0 == access("234.bin",F_OK))
{
remove = true;
}
这么改后,还是没能看到我想要的错误,我想要看到remove不存在的出错啊~~很可惜,依旧是:

原来:

remove是一个已经存在的函数,函数地址不为空,所以一直都能进 if(remove){}

大家,以后判断文件是否存在,用以下的代码比较好:

#include<iostream>
#include "unistd.h"
#include "stdio.h"
#include "stdlib.h"
using namespace std;

int file_exist(char *file)
{
    return (access(file,F_OK) == 0);
}
int main()
{
    cout<<"Does file exist :"<<(file_exist("234.bin")?"Yes":"No")<<endl;
    return 0;
}
总结:

(一)用access函数注意返回值是 0 和-1,都是false

(二)remove是个函数名,定义命名的时候注意不要用到系统的东东


版权声明:随意转载。

C++中的_access函数

今天读代码看到一个access函数,当时没明白怎么回事。man了一下才知道该函数主要用于文件读取方面——判断文件是否存在,并判断文件是否可写。Linux下,该函数为access,位于头文件中,而在标准...
  • qq_28098067
  • qq_28098067
  • 2016年01月26日 13:50
  • 11415

C++ access函数判断文件是否存在

最近看到一个函数,第一眼觉得很sb,因为remove的定义在if内部,变成了局部变量,结果如果文件“234.bin”不存在的话,一定会出错的,因为remove的生存期有限。 结果,亮瞎我的眼...
  • q1070292175
  • q1070292175
  • 2014年01月07日 09:57
  • 3789

C中的access函数

C中的access函数        int   access(const   char   *filename,   int   amode);  amode参数为0时表示检查...
  • ljd_1986413
  • ljd_1986413
  • 2013年11月27日 14:14
  • 5335

C++ access函数所需包含的头文件

1、编译包含access函数的源码时,提示: 错误: ‘access’在此作用域中尚未声明 其中,已包含头文件如下: #include #include #include ...
  • u010555688
  • u010555688
  • 2017年02月15日 16:03
  • 630

嵌入式Linux C笔试题积累

http://blog.csdn.net/h_armony/article/details/6764811 1.   嵌入式系统中断服务子程序(ISR)   中断是嵌入式系统中重要的组...
  • tanqiuwei
  • tanqiuwei
  • 2014年03月26日 10:13
  • 5220

C++获取windows系统时间的七种方式

1.CTime类:获取系统当前时间,精确到秒 [cpp] view plain copy   CString str;   CTime ...
  • bao_bei
  • bao_bei
  • 2016年02月01日 11:08
  • 5138

C中的access函数-- 判断文件是否存在及可读写等属性

【access系统调用】   功能描述: 检查调用进程是否可以对指定的文件执行某种操作。   用法: #include #include int access(const ...
  • feixue2004
  • feixue2004
  • 2013年12月09日 15:55
  • 3243

用_access判断文件或文件夹是否存在及其读写权限

摘自MSDN,以前一直没用过这个函数,今天调试程序发现了这个函数,感觉挺好用,尤其是判断一个文件或文件夹是否存在的时候,用不着再find了,文件的话还可以检测读写权限,文件夹的话则只能判断是否存在in...
  • hurtmanzc
  • hurtmanzc
  • 2007年02月13日 10:39
  • 6733

C++ Builder 带VCL 的DLL

建立DLL工程 编写DLL 文件的出口函数 带VCL的程序与普通程序不同之处为在调用函数进行FORM 定义,否则会出现,“Access Vio…”内存溢出报错。 操作 参考:http://docwi...
  • swanwei
  • swanwei
  • 2017年12月20日 17:55
  • 31

32位和64位系统内核函数调用从ZwProtectVirtualMemory到NtProtectVirtualMemory

https://www.cnblogs.com/aliflycoris/p/5828157.html 0x01 前言   我们知道R3层中,Zw系列函数和Nt系列函数函数是一样...
  • fyfywg
  • fyfywg
  • 2017年11月20日 00:15
  • 114
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++(五) access函数判断文件是否存在
举报原因:
原因补充:

(最多只允许输入30个字)