c/c++判断目录和文件是否存在

2015-12-05 13:37:32|?次阅读|上传:wustguangh【已有?条评论】发表评论

关键词:C/C++, 文件操作|来源:唯设编程网

编程进行文件访问时,我们通常需要判断某个目录或者文件是否存在,本文是一些常用的c/C++判断文件/目录是否存在的方法,包括access,opendir,fstream::open,PathFileExist,exist函数,其中有的是c语言提供的函数,有的是c++的库函数,也有的是windows API函数,还包括了boost的库函数,通过例子介绍了它们的用法。供参考:

1. windows平台下使用vc或gcc

函数名: access
功  能: 确定文件的访问权限
用  法: int access(const char *filename, int amode); 文件的话还可以检测读写权限,文件夹的话则只能判断是否存在

#include "stdafx.h"
#include  <io.h>
#include  <stdio.h>
#include  <stdlib.h>

void main( void )
{
   /* Check for exist */
   if( (_access( "C:windows", 0 )) != -1 )
   {
      printf( "windows exists " );
    
     
   }
}

其实判断文件存在fopen就行了。

2. linux下或者gcc下

#include <stdio.h>
#include <stdlib.h>

#include <dirent.h>
#include <unistd.h>
void main( void )
{
DIR *dir = NULL;
     /* Open the given directory, if you can. */ 
    dir = opendir( "C:windows" );
     if( dir != NULL ) {
         printf( "Error opening " );
         return ;
     }
}

opendir() 返回的 DIR 指针与 fopen() 返回的 FILE 指针类似,它是一个用于跟踪目录流的操作系统特定的对象。

3. 使用c++标准库

#include "stdafx.h"
#include <iostream>
#include <fstream>
using namespace std;
#define FILENAME  "C:windows"
int main()
{
     fstream file;
     file.open(FILENAME,ios::in);
     if(!file)
     {
         cout<<FILENAME<<"存在";
      }
      else
      {
          cout<<FILENAME<<"不存在";
      }
      return 0;
}

gcc编译去掉#include "stdafx.h"即可

4. 使用Windows API PathFileExists

#include "stdafx.h"

#include <iostream>
#include <windows.h>
#include <shlwapi.h>
#pragma   comment(lib,"shlwapi.lib")
using namespace std;
#define FILENAME  "C:windows"
int main()
{
      if (::PathFileExists(FILENAME))
       cout<<"exist";
    return 0;
}

注意windows.h 一定要在shlwapi.h前面定义

5. 使用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:myTestTest1Test2";
    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;
}

转载:http://blogger.org.cn/blog/more.asp?name=hongrui&id=28011

发表评论0条 】
网友评论(共?条评论)..
c/c++判断目录和文件是否存在