文章转自:
http://blogger.org.cn/blog/more.asp?name=hongrui&id=28011
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就行了。
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 指针类似,它是一个用于跟踪目录流的操作系统特定的对象。
使用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"即可
使用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前面定义
使用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;
}