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函数判断文件是否存在

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

C++执行外部程序(调用外部exe程序)

参考一: 1.使用system函数 system("xxx.exe参数1参数2 参数3...) chars[300]; char*filename = "*****"; ...
  • zhu2695
  • zhu2695
  • 2013年09月28日 16:25
  • 14047

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

【access系统调用】   功能描述: 检查调用进程是否可以对指定的文件执行某种操作。   用法: #include #include int access(const ...

linux下的access()函数判断文件是否存在、打印时间

一、access函数 功能描述: 检查调用进程是否可以对指定的文件执行某种操作。   用法: #include #include int access(const cha...

Windows下使用_access和_stat判断文件和目录是否存在的区别

判断一个文件和目录是否存在,可以使用_access或者_stat函数,但是要注意两点: _access能检测给定路径是否存在,但是无法区分这个路径是文件路径还是目录路径,比如指定路径d:\123,...
  • BeanJoy
  • BeanJoy
  • 2016年09月21日 14:01
  • 1990

C++ 获取文件夹内的文件名,判断文件(夹)是否存在的两个函数

C++判断文件是否存在

  • 2012年04月27日 00:03
  • 18KB
  • 下载

玩玩linux下的access函数---探测文件/目录权限

access函数用来探测文件/目录权限, 我们先来看程序: #include #include int main() { char szTest[][100] = { "ls", "...
  • stpeace
  • stpeace
  • 2015年05月06日 22:53
  • 2256

(十五)文件操作——access函数的介绍和使用

头文件:#include < unistd.h> 定义函数:int access(const char * pathname, int mode); 函数说明:access()会检查是否可...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C++(五) access函数判断文件是否存在
举报原因:
原因补充:

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