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
-
-
-
-
-
- #include <io.h>
- #include <stdio.h>
- #include <stdlib.h>
-
- void main( void )
- {
-
- if( (_access( "ACCESS.C", 0 )) != -1 )
- {
- printf( "File ACCESS.C exists " );
-
- 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;
- }
(roger_77) |