(二) C/C++中判断文件或文件夹是否存在

方法1. access函数

适用范围:所有C/C++项目

头文件:   #include < io.h>

函数原型: intaccess(const char *filename, int mode);

函数说明:判断是否具有存取文件的权限

函数参数说明:

filename:可以填写文件夹路径或者文件路径

mode:

F_OK (或0): 判断该文件/文件夹是否存在;

R_OK (或2): 判断该文件/文件夹是否有读权限;

W_OK (或4): 判断该文件/文件夹是否有写入权限;

X_OK (或6): 判断该文件/文件夹是否有执行权限;

返回值:

若存在或者具有权限,返回值为0;不存在或者无权限,返回值为-1,并把错误代码存在errno 中(errno.h中定义)。

错误代码:

EACCESS:参数pathname所指定的文件不符合所要求测试的权限.

EROFS: 欲测试写入权限的文件存在于只读文件系统内.

EFAULT:参数pathname指针超出可存取内存空间.

EINVAL:参数mode 不正确.

ENAMETOOLONG:参数pathname太长.

ENOTDIR:参数pathname为一目录.

ENOMEM:核心内存不足

ELOOP: 参数pathname 有过多符号连接问题.

EIO I/O:存取错误.


#include  <stdio.h>

#include  <io.h>

int  main(int argc, const char** argv)

{

char* filePath = "C://Users//Public//Downloads"  ;

if (_access(filePath,0) == -1)

{

printf("The  file/dir doesn‘t exisit");

}

else

{

printf("Exisit ");

}

return 0;

}

方法2. fopen函数

适用范围:所有C/C++项目

头文件:   #include<stdio.h>或 #include<fstream>

函数原型: FILE *fopen(const char * path, const char * mode);

函数说明:判断是否具有存取文件的权限

函数参数说明:

filename:可以填写文件夹路径或者文件路径

mode:

r  : 以只读方式打开文件,该文件必须存在。

r+ : 以可读写方式打开文件,该文件必须存在。

w : 打开只写文件,若文件存在则文件长度清为0,即该文件内容会消失。若文件不存在则建立该文件。

a: 以附加的方式打开只写文件。

b: 二进制文件。

返回值:

文件顺利打开后,指向该流的文件指针就会被返回。如果文件打开失败则返回NULL,并把错误代码存在errno 中(errno.h中定义)。

用于判断文件是否存在可以使用 r 或者 rb ,返回值为NULL,说明打不开或不存在。但用这种方法做出的判断是不完全正确的,因为有的文件存在,但是可能不可读。


#include  <stdio.h>

//#include<fstream>

int  main(int argc, const char** argv)

{

char* filePath =  "C://Users//Public//Downloads" ;

FILE    *fp=NULL;

fp = fopen(filePath,"r");//只供读取

if (fp == NULL)

{

printf("The file/dir doesn‘t exisit");

}

else

{

printf("Exisit  ");

}

fclose(fp);//关闭文件

fp=NULL;//需要指向空,否则会指向原打开文件地址

return  0;

}

扩展. 建一个文件夹

头文件:  #include<direct.h>

函数原型: int _mkdir(const char *path,mode_t mode);

函数说明:建立一个文件夹

返回值:创建成功则返回0,否则返回-1

方法3. FindFirstFile函数

适用范围:windows平台

头文件: #include "windows.h"

函数原型:

__out HANDLEWINAPI FindFirstFileW(

__in  LPCWSTR lpFileName,

__outLPWIN32_FIND_DATAW lpFindFileData);

__outHANDLE WINAPI FindFirstFileA(

__in  LPCSTR lpFileName,

__outLPWIN32_FIND_DATAW lpFindFileData);

函数说明:检查文件或文件夹是否存在


#include  <stdio.h>

#include  "windows.h"

int  main(int argc, const char** argv)

{

WIN32_FIND_DATA  wfd ;

HANDLE hFind;

WCHAR *filePath =  L"C://Users//Public//Downloads";

hFind = FindFirstFile(filePath, & wfd );

//判断文件

if (hFind == INVALID_HANDLE_VALUE)

{     printf ("Invalid File Handle. Get Last Error reports %d ",  GetLastError());  }

else

{

printf ("The first file found is %s  ",  wfd .cFileName);

FindClose(hFind);

}

//判断文件夹

if  (hFind != INVALID_HANDLE_VALUE &&(wfd.dwFileAttributes &  FILE_ATTRIBUTE_DIRECTORY))

{

printf ("The first file found is  %s ", wfd.cFileName);

FindClose(hFind);

}

else

{     printf ("Invalid File Handle. Get Last Error reports %d ",  GetLastError());  }

return (0);

}

 

方法4. PathFileExists函数

适用范围:MFC项目

头文件: #include <shlwapi.h>

函数原型:

LWSTDAPI_(BOOL) PathFileExistsA(__in LPCSTR pszPath);

或:

LWSTDAPI_(BOOL) PathFileExistsW(__in LPCWSTR pszPath);

 

参考:

http://blog.csdn.net/roger_77/article/details/1538447

http://blog.csdn.net/gneveek/article/details/6848473

http://blog.csdn.net/xhhjin/article/details/6369336

时间: 2024-11-07 04:07:55

(二) C/C++中判断文件或文件夹是否存在的相关文章

C/C++中判断某一文件或目录是否存在

1 //1.C++很简单的一种办法: 2 #include <iostream> 3 #include <fstream> 4 using namespace std; 5 #define FILENAME "stat.dat" 6 int main() 7 { 8 fstream _file; 9 _file.open(FILENAME,ios::in); 10 if(!_file) 11 { 12 cout<<FILENAME<<&q

Android的学习之路(二)项目中原生文件的使用场景和文件介绍

1.src文件:java源代码存放目录 2.gen 文件:自动生成所有由android开发工具自动生成的文件,目录中最重要的就是R.java文件,这个文件由android开 发工具自动产生的.android开发工具会自动根据你存放res目录的资源,同步更新修稿R.java文件,正因为 R.java文件是由开发工具自动生成的,所以我们应避免手工修改R.java.R.java文件在应用中起到了字典的作 用,它包含了各种资源的ID,通过R.java,应用可以很方便的找到对应资源, 2.1R.java 

vc中判断excel、word文件是否存在,删除excel文件

vc中判断excel文件是否存在,删除excel文件可以使用PathFileExists_和DeleteFile函数 但是,由于03以后excel的后缀改为.xlsx.所以,使用时需加后缀.xlsx. 如:PathFileExists(“C:\Users\tony-wt\Desktop\MyProject\11.xlsx”) vc中判断excel.word文件是否存在,删除excel文件

Android中View绘制优化二一---- 使用&lt;include /&gt;标签复用布局文件

本文原创, 转载请注明出处:http://blog.csdn.net/qinjuning 译二: 使用<include />标签复用布局文件  翻译地址:http://developer.android.com/training/improving-layouts/reusing-layouts.html#Merge 尽管Android通过内置了各种各样的控件提供了微小.可复用的交互性元素,也许你需要复用较大的 组件 ---- 某些特定布局文件 .为了更有效率复用的布局文件,你可以使用<

shell中判断文件或目录是否存在

可以通过man test来查看文档,下面的文章转自http://m.blog.csdn.net/blog/yuanjungogogo/9222875 #!/bin/sh myPath="/var/log/httpd/" myFile="/var /log/httpd/access.log" # 这里的-x 参数判断$myPath是否存在并且是否具有可执行权限 if [ ! -x "$myPath"]; then mkdir "$myPa

【只怕没有几个人能说清楚】系列之二:Unity中的特殊文件夹

参考:http://www.manew.com/thread-99292-1-1.html 1. 隐藏文件夹     以.开头的文件夹会被忽略.在这种文件夹中的资源不会被导入,脚本不会被编译.也不会出现在Project视图中.这种文件我们可以在资源浏览器的时候,能找到这些文件. 2. Standard Assets     在这个文件夹中的脚本最先被编译.一般是放一些Unity 内置的一些资源.     这个文件夹中的脚本会被导出到Assembly-CSharp-firstpass, Assem

项目架构基础之二 ---- 工程中创建静态库文件(.a)库文件

步骤1.创建工程HLStaticTest 步骤2.创建静态库文件 步骤3. 关闭HLStatic,回到HLStaticTest Targets - >Build Phases ->Link Binary With Libraries 然后进入到  Targets -> Build Setting ->Header Search Paths 步骤 4. 进入AppDelegate 工程中创建静态库文件(.a)库文件 成功 版权声明:本文为博主原创文章,未经博主允许不得转载.

C# winform中判断文件是否处于打开状态

最近做一个课题,要求winform客户端能保存接收到的实验数据到文件(如.txt文件),并能打开保存好了的实验数据文档,当数据文件已经被打开,要提示文件已被打开,也就是如何判断文件是否处于打开状态,然后给出相应提示.通过查找资料发现C#本身是很难判断一个文件是否被打开的,相关资料给出需用到windowsAPI来实现,这种方法按理说是可以的,但也许是我没有完全领会到相关函数的意义和返回值,致使不能判断文件已经被打开,相关的程序和问题给出如下: public class FileStaues { [

Python中基本的读文件和简单数据处理

Python中基本的读文件和简单数据处理 暂无评论 DataQuest上面的免费课程(本文是Python基础课程部分),里面有些很基础的东西(csv文件读,字符串预处理等),发在这里做记录.涉及下面六个案例: Find the lowest crime rate(读取csv文件,字符串切分,for循环和if判断过滤数据) Discover weather pattern in LA(for循环和if判断进行频数统计) Building a Spell Checker(词频统计,字符串预处理,字典