#include
#include
using
namespace std;
#define FILENAME "stat.dat"
int main()
{
fstream _file;
_file.open(FILENAME,ios::
in);
if(!_file)
{
cout< }
else
{
cout< }
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
;
}
-eof-