`

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

阅读更多

 


1.C++很简单的一种办法:
#include <iostream>
#include 
<fstream>
using namespace std;
#define FILENAME "stat.dat"
int main()
{
     fstream _file;
     _file.open(FILENAME,ios::
in);
     
if(!_file)
     {
         cout
<<FILENAME<<"没有被创建";
      }
      
else
      {
          cout
<<FILENAME<<"已经存在";
      }
      
return 0;
}
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

Example

/* ACCESS.C: This example uses _access to check the  * file named "ACCESS.C" to see if it exists and if  * writing is allowed.  */ #include  <io.h> #include  <stdio.h> #include  <stdlib.h> void main( void ) {    /* Check for existence */    if( (_access( "ACCESS.C"0 )) != -1 )    {       printf( "File ACCESS.C exists " );       /* Check for write permission */       if( (_access( "ACCESS.C"2 )) != -1 )          printf( "File ACCESS.C has write permission " );    } }
Output
File ACCESS.C existsFile ACCESS.C has write permission

3.在windows平台下用API函数FindFirstFile(...):

(1)检查文件是否存在:

#define _WIN32_WINNT 0x0400

#include 
"windows.h"

int
main(
int argc, char *argv[])
{
  WIN32_FIND_DATA FindFileData;
  HANDLE hFind;

  printf (
"Target file is %s. ", argv[1]);

  hFind 
= FindFirstFile(argv[1], &FindFileData);

  
if (hFind == INVALID_HANDLE_VALUE) {
    printf (
"Invalid File Handle. Get Last Error reports %d ", GetLastError ());
  } 
else {
    printf (
"The first file found is %s ", FindFileData.cFileName);
    FindClose(hFind);
  }

  
return (0);
}

(2)检查某一目录是否存在:

///目录是否存在的检查:
bool  CheckFolderExist(const string &strPath)
{
    WIN32_FIND_DATA  wfd;
    
bool rValue = false;
    HANDLE hFind 
= FindFirstFile(strPath.c_str(), &wfd);
    
if ((hFind != INVALID_HANDLE_VALUE) && (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))
    {
        rValue 
= true;   
    }
    FindClose(hFind);
    
return rValue;
}

4.使用boost的filesystem类库的exists函数

#include <boost/filesystem/operations.hpp>
#include 
<boost/filesystem/path.hpp>
#include 
<boost/filesystem/convenience.hpp>

int GetFilePath(std::string &strFilePath)
{
    
string strPath;
    
int nRes = 0;

    
//指定路径            
    strPath = "D:\myTest\Test1\Test2";
    
namespace fs = boost::filesystem;

    
//路径的可移植
    fs::path full_path( fs::initial_path() );
    full_path 
= fs::system_complete( fs::path(strPath, fs::native ) );
    
//判断各级子目录是否存在,不存在则需要创建
    if ( !fs::exists( full_path ) )
    {
        
// 创建多层子目录
        bool bRet = fs::create_directories(full_path);
        
if (false == bRet)
        {
            
return -1;
        }

    }
    strFilePath 
= full_path.native_directory_string();

    
return 0;
}

 

分享到:
评论

相关推荐

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

    总结,C/C++中判断文件或目录存在的方法多种多样,可以根据具体的需求和目标平台选择合适的方法。`fstream`适合简单判断,而`access()`、`stat()`和Boost库的`exists()`则提供了更详细的文件状态信息和更多的功能。...

    C++基础:怎样判断某一文件是否存在

    本文将详细介绍两种常用的判断文件是否存在的方法:第一种是使用`fstream`类来尝试打开文件;第二种是调用C标准库中的`access`函数。 #### 方法一:使用`fstream`类 这种方法基于`fstream`流类,通过尝试以输入...

    cc++中判断一个文件是否存在的方法

    在C/C++编程语言中,判断一个文件是否存在是常见的需求之一。这通常涉及到对操作系统API的调用,以便检查文件系统中的文件状态。根据提供的文件信息,“cc++中判断一个文件是否存在的方法”这一主题主要关注了五种...

    C++基础:怎样判断某一文件是否存在.doc

    另一种方法是使用C语言中的`access`函数,该函数可以用来检测文件的访问权限,同时也可用于判断文件是否存在。此方法的优势在于它可以更灵活地检测文件的访问权限,而不仅仅是判断文件是否存在。 下面是使用`access...

    用C/C++ 列出指定目录的所有文件夹和文件

    3. **文件属性**:学习如何判断文件是否为子目录或普通文件。 4. **路径字符串处理**:掌握如何处理路径字符串,构建子目录的完整路径。 5. **错误处理**:处理可能出现的错误情况,如目录不存在等。 #### 代码详解...

    C++判断文件是否存在

    C++判断文件是否存在 C++中判断文件是否存在有多种方法,这篇文章将介绍其中的两种方法。 第一种方法:使用fstream库 使用fstream库可以判断文件是否存在,该方法非常简单。首先,需要包含iostream和fstream...

    C/C++几道笔试题

    在C/C++编程领域,笔试题常常用于评估应聘者的编程基础、问题解决能力和逻辑思维能力。下面我们将深入探讨这些题目中可能涉及的关键知识点,并通过分析`test01`这个文件名,推测它可能涵盖的内容。 1. **基本语法**...

    c/c++中文手册(包含c++17标准).zip

    《C/C++中文手册》是为C++和C语言学习者提供的重要参考资料,特别是其中包含了C++17标准,这是C++发展的一个重要里程碑。C++17在之前的C++11和C++14标准基础上,引入了更多优化和新特性,使得编程更加高效、简洁。 ...

    VScode C/C++配置文件及CMake工程.rar

    本压缩包“VScode C/C++配置文件及CMake工程.rar”包含了在VScode中配置C/C++开发环境以及使用CMake构建系统所需的相关文件。下面将详细阐述如何利用这些资源进行高效开发。 1. **VScode C/C++扩展配置**:VScode的...

    C/C++面试大全 华为面试

    根据给定文件中的信息,“C/C++面试大全 华为面试”这份资料主要涵盖了C/C++语言的基础知识以及华为公司对于这些知识点的具体面试题目。通过分析描述和部分内容,我们可以总结出以下几方面的知识点: ##### 1. ...

    c/c++遍历某一文件夹下,所有txt文件内部信息,并标记出包含某一特定字符的文件路径

    在C/C++编程中,遍历一个文件夹下的所有TXT文件并检查它们是否包含特定字符是一项常见的任务,特别是在处理大量文本数据时。这个任务涉及到文件系统操作、文件I/O以及字符串处理等多个知识点。以下是一个详细的步骤...

    C++压缩和解压ZIP文件,有演示代码

    在IT行业中,C++是一种强大的编程语言,广泛用于系统软件、游戏引擎、设备驱动程序以及高性能计算等场景。本文将详细介绍如何使用C++对ZIP文件进行压缩和解压缩操作,同时提供一个基于ZipLib库的封装示例。ZipLib是...

    c/c++ windows ble 蓝牙操作

    c/c++ windows 通过winrt操作ble 蓝牙 #include #include #include &lt;winrt/Windows.Foundation.h&gt; #include &lt;winrt/Windows.Foundation.Collections.h&gt; #include &lt;winrt/Windows.Devices.Bluetooth.h&gt; #include ...

    C/C++编码规范

    尽管C/C++语言本身没有强制性的编码规范要求,但考虑到代码的可读性和可维护性,以及可能存在的团队协作与后续维护需求,制定一套编码规范显得尤为重要。 #### 二、文件体系结构 文件体系结构部分主要是指项目中的...

    腾讯c/c++面试题

    从给定的文件信息中,我们可以提炼出一系列与C/C++相关的知识点,这些知识点涵盖了面试题目的设计、数据结构、算法、操作系统基础以及面试策略等多个方面。以下是对这些知识点的详细解析: ### C/C++基础知识 1. *...

    清除C/C++空行、注释

    在软件开发过程中,尤其是涉及到版权保护和源码管理时,可能会有需求清除C或C++源代码中的空行和注释。这样的操作有助于减少代码体积,保护源码隐私,同时在统计代码行数时,可以更准确地反映出实际编写的有效代码量...

Global site tag (gtag.js) - Google Analytics