zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    JS定义一个立即执行的可重用函数
    Git常用命令速记与入门
    设计的一些kubernetes面试题
    运维知识各种链接
    php7.2安装smbclient扩展
    logrotate自定义切割时间的一些坑
    【转】日志收集工具scribe
    ELK日志报警插件ElastAlert并配置钉钉报警
    consul-server集群搭建
    加油,骚年
  • 原文地址:https://www.cnblogs.com/MATU/p/3796767.html
Copyright © 2011-2022 走看看