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<<"没有被创建";
13       }
14       else
15       {
16           cout<<FILENAME<<"已经存在";
17       }
18       return 0;
19 }
2.利用 c 语言的库的办法:
函数名: access
功  能: 确定文件的访问权限
用  法: int access(const char *filename, int amode);
以前一直没用过这个函数,今天调试程序发现了这个函数,感觉挺好用,尤其是判断一个文件或文件夹是否存在的时候,用不着再find了,文件的话还可以检测读写权限,文件夹的话则只能判断是否存在,下面摘自MSDN:

int _access( const char *path, int mode );

Return Value

Each of these functions returns 0 if the file has the given mode. The function returns –1 if the named file does not exist or is not accessible in the given mode; in this case, errno is set as follows:

EACCES

Access denied: file’s permission setting does not allow specified access.

ENOENT

Filename or path not found.

Parameters

path

File or directory path

mode

Permission setting

Remarks

When used with files, the _access function determines whether the specified file exists and can be accessed as specified by the value of mode. When used with directories, _access determines only whether the specified directory exists; in Windows NT, all directories have read and write access.

mode Value            Checks File For
00                              Existence only
02                              Write permission
04                              Read permission
06                              Read and write permission 
 1 //Example
 2 /* ACCESS.C: This example uses _access to check the * file named "ACCESS.C" to see if it exists and if * writing is allowed. */
 3 #include  <io.h>
 4 #include  <stdio.h>
 5 #include  <stdlib.h>
 6 void main( void )
 7 {
 8      /* Check for existence */
 9      if( (_access( "ACCESS.C", 0 )) != -1 )
10      {      printf( "File ACCESS.C exists " );
11            /* Check for write permission */
12            if( (_access( "ACCESS.C", 2 )) != -1 )
13           printf( "File ACCESS.C has write permission " );
14      }
15 }
16
17 /*
18 Output
19 File ACCESS.C existsFile ACCESS.C has write permission
20 */
 1 //3.在windows平台下用API函数FindFirstFile(...):
 2
 3 //(1)检查文件是否存在:
 4 #define _WIN32_WINNT 0x0400
 5
 6 #include "windows.h"
 7
 8 int main(int argc, char *argv[])
 9 {
10   WIN32_FIND_DATA FindFileData;
11   HANDLE hFind;
12
13   printf ("Target file is %s. ", argv[1]);
14
15   hFind = FindFirstFile(argv[1], &FindFileData);
16
17   if (hFind == INVALID_HANDLE_VALUE) {
18     printf ("Invalid File Handle. Get Last Error reports %d ", GetLastError ());
19   } else {
20     printf ("The first file found is %s ", FindFileData.cFileName);
21     FindClose(hFind);
22   }
23
24   return (0);
25 }
 1 ///2目录是否存在的检查:
 2 bool  CheckFolderExist(const string &strPath)
 3 {
 4     WIN32_FIND_DATA  wfd;
 5     bool rValue = false;
 6     HANDLE hFind = FindFirstFile(strPath.c_str(), &wfd);
 7     if ((hFind != INVALID_HANDLE_VALUE) && (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
 8     {
 9         rValue = true;
10     }
11     FindClose(hFind);
12     return rValue;
13 }
 1 //4.使用boost的filesystem类库的exists函数
 2 #include <boost/filesystem/operations.hpp>
 3 #include <boost/filesystem/path.hpp>
 4 #include <boost/filesystem/convenience.hpp>
 5
 6 int GetFilePath(std::string &strFilePath)
 7 {
 8     string strPath;
 9     int nRes = 0;
10
11     //指定路径
12     strPath = "D:/myTest/Test1/Test2";
13     namespace fs = boost::filesystem;
14
15     //路径的可移植
16     fs::path full_path( fs::initial_path() );
17     full_path = fs::system_complete( fs::path(strPath, fs::native ) );
18     //判断各级子目录是否存在,不存在则需要创建
19     if ( !fs::exists( full_path ) )
20     {
21         // 创建多层子目录
22         bool bRet = fs::create_directories(full_path);
23         if (false == bRet)
24         {
25             return -1;
26         }
27
28     }
29     strFilePath = full_path.native_directory_string();
30
31     return 0;
32 }

C/C++中判断某一文件或目录是否存在,布布扣,bubuko.com

时间: 2024-11-02 19:16:49

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

iOS6.1 &amp; iOS 7 &amp; iOS8 判断沙盒文件或者目录是否存在,以及判断是文件还是目录的一个隐藏问题

- (BOOL)fileExistsAtPath:(NSString *)path isDirectory:(BOOL *)isDirectory 通常,iOS系统中判断文件或者目录是否存在,可以用上面这个API. 第二个参数 isDirectory是个传出参数, 用于返回,是文件还是目录. 一般两种情况会使用这个API 需求一. 判断文件或者目录是否存在 需求二. 判断path是文件还是目录 需求一.只要判断这个API的返回值,YES为存在,NO为不存在即可,isDirectory不需要判断

判断沙盒文件或者目录是否存在,以及判断是文件还是目录的一个隐藏问题

- (BOOL)fileExistsAtPath:(NSString *)path isDirectory:(BOOL *)isDirectory 通常,iOS系统中判断文件或者目录是否存在,可以用上面这个API. 第二个参数 isDirectory是个传出参数, 用于返回,是文件还是目录. 一般两种情况会使用这个API 需求一. 判断文件或者目录是否存在 需求二. 判断path是文件还是目录 需求一.只要判断这个API的返回值,YES为存在,NO为不存在即可,isDirectory不需要判断

Android项目在eclipse中无法打包apk文件[bin目录下没生成apk文件]问题解决

后来我发现在eclipse的Preferences -> Android -> Build中有一项“Skip packaging and dexing until export or launch....”,原来这个选项默认是被勾选的,这个选项的意思是“跳过packing和dexing,直到export或者 launch...”,去掉这个选项即可解决问题. Android项目在eclipse中无法打包apk文件[bin目录下没生成apk文件]问题解决

C++ stat判断路径是文件还是目录

1 #include <iostream> 2 #include <sys/stat.h> 3 4 using namespace std; 5 6 void foo ( const char* path ) { 7 struct stat s; 8 if ( stat ( path, &s ) == 0 ) { 9 if ( s.st_mode & S_IFDIR ) { 10 cout << "DIR" << endl

centos中查找出大文件命令汇总

在linux中简单的查找文件与目录大小很简单 #已易读的格式显示指定目录或文件的大小,-s选项指定对于目录不详细显示每个子目录或文件的大小 du -sh [dirname|filename] 如: 当前目录的大小: 代码如下 复制代码 du -sh . 当前目录下个文件或目录的大小: 代码如下 复制代码 du -sh * 显示前10个占用空间最大的文件或目录: 代码如下 复制代码 du -s * | sort -nr | head * -h已易读的格式显示指定目录或文件的大小 * -s选项指定对

文件查询之三:文件和目录的批量操作

经过之前两篇的随笔已经可以将所需要的文件和目录查找出来,并且保存在一个文档中,所以现在就是利用保存文件或目录的文档来进行批量处理,对文件或目录进行批量的 删除.复制和移动.主要是用到shutil模块中的函数和os模块中的函数进行一系列的操作.shutil模块存在大量的文件操作和目录操作的函数,包括常用的移动文件或复制文件 等操作,其中os和shutil下对于函数的功能存在交集,只不过相同功能下的函数名存在差异,函数上的细节处理方面也有可能不一样.在这里主要的是讲shutil模块下的函数. 首先是

python之OS模块(对文件or目录操作)

OS模块 os,语义为操作系统,包含普遍的操作系统功能,与具体的平台无关.python编程时,处理文件和目录这些操作,就比如说:显示当前目录下所有文件/删除某个文件/获取文件大小-- os模块不受平台限制,也就是说:当我们要在linux中显示当前命令时就要用到pwd命令,而Windows中cmd命令行下就要用到这个,例如:这时候我们使用python中os模块的os.path.abspath(name)功能,甭管是linux或者Windows都可以获取当前的绝对路径. 常见函数列表 os.name

攻城狮在路上(叁)Linux(十五)--- 文件与目录的默认权限与隐藏权限

一.文件默认权限:umask <==需要被减去的权限. 1.umask指的是当前用户在新建文件或者目录时的默认权限,如0022; 2.默认情况下,用户创建文件的最大权限为666; 创建目录的最大权限为777. 3.最终权限 = 最大权限 - umask; <== 此处注意并非是数值直接相减. 4.设置umask: umask 002; 5.由上述条件,自己判断用户新建文件或目录的最终权限. 二.文件的隐藏属性: chattr.lsattr , 隐藏属性对于系统安全有很大的帮助. chattr

【Linux命令】文件和目录操作命令

本文主要用于常用命令的备忘,具体用法可用man查看,或查询其他资料. cd:改变工作目录 ls:列出目录的内容 mkdir:创建一个目录 cat:连接并显示指定的一个和多个文件的有关信息 cp:将给出的文件或目录复制到另一文件或目录中 mv:为文件或目录改名或将文件由一个目录移入另一个目录中 rm:删除一个目录中的一个或多个文件或目录 chown:修改文件所有者和组别 chgrp:改变文件的组所有权 chmod:改变文件的访问权限 grep:在指定文件中搜索特定的内容,并将含有这些内容的行标准输