C/C++中判断某一文件或目录是否存在
来源:互联网 发布:c windows system32 编辑:程序博客网 时间:2024/05/01 21:32
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"intmain(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++中判断某一文件或目录是否存在
- C/C++中判断某一文件或目录是否存在
- C/C++中判断某一文件或目录是否存在
- C/C++中判断某一文件或目录是否存在
- C/C++中判断某一文件或目录是否存在
- C/C++中判断某一文件或目录是否存在
- C/C++中判断某一文件或目录是否存在
- C/C++中判断某一文件或目录是否存在
- C/C++中判断某一文件或目录是否存在
- C/C++中判断某一文件或目录是否存在 .
- C/C++中判断某一文件或目录是否存在
- C/C++中判断某一文件或目录是否存在
- C/C++中判断某一文件或目录是否存在
- C/C++中判断某一文件或目录是否存在
- C/C++中判断某一文件或目录是否存在
- C/C++中判断某一文件或目录是否存在
- C/C++中判断某一文件或目录是否存在
- [中英文对照]android Designing for TV(三) ------ Handling Features Not Supported on TV 在TV上处理不支持的功能
- 嵌入式Linux之我行——S3C2440上LCD驱动(FrameBuffer)实例开发讲解(一) .
- 如何做好基层管理者(二)
- Keil MDK编译器(V4.03)与J-LINK使用
- Singletons in Objective-C
- C/C++中判断某一文件或目录是否存在
- Eclipse ADT配置CVS
- 升级 Windiows 2012 引起 MDT 的两个路径错误
- 爱立信2013暑期实习项目 历程
- GCM的Push功能调查汇总
- 设计模式六大原则(4):接口隔离原则
- SqlServer和Oracle中一些常用的sql语句3 行列转换
- DHL解决起来很容易,联系起来很难
- 计算机科学中最重要的32个算法