C/C++判断一个文件是否存在
1.
2. 利用 c 语言的库的办法:
3.用FindFirstFile
1.
bool
isExistFile(
const
char
*
pszFileName)
{
FILE *fp = fopen(pszFileName, "rb");
if(fp == NULL)
return false;
fclose(fp);
return true;
}
或
}
bool
isExistFile(
const
char
*
pszFileName)
{
fstream file;
file.open(pszFileName,ios::in);
if(!file)
return false;
return true;
}
2. 利用 c 语言的库的办法:
函数名: access
//
crt_access.c
#include
<
io.h
>
#include
<
stdio.h
>
#include
<
stdlib.h
>
int main(
void
)
{
if( (_access( "crt_ACCESS.C", 0 )) != -1 )
{
printf( "File crt_ACCESS.C exists\n" );
if( (_access( "crt_ACCESS.C", 2 )) == -1 )
printf( "File crt_ACCESS.C does not have write permission\n" );
}
}
#include
#include
#include
int
{
}
3.用FindFirstFile
#include
<
windows.h
>
#include
<
string
>
#include
<
vector
>
using
namespace
std;
// 核查目录,若目录不存在,创建目录
bool FindOrCreateDirectory(
const
char
*
pszPath )
{
WIN32_FIND_DATA fd;
HANDLE hFind = ::FindFirstFile( pszPath, &fd );
while( hFind != INVALID_HANDLE_VALUE )
{
if ( fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
return true;
}
if ( !::CreateDirectory( pszPath, NULL ) )
{
char szDir[MAX_PATH];
sprintf_s( szDir, sizeof(szDir), "创建目录[%s]失败,请检查权限", pszPath );
::MessageBox( NULL, szDir, "创建目录失败", MB_OK|MB_ICONERROR );
return false;
}
return true;
}
// 遍历目录
bool CheckDirectory(
char
*
pszPath )
{
vector< std::string > vtPath;
const char* sep = "\\/";
char* next_token;
char* token = strtok_s( pszPath, sep, &next_token);
while( token != NULL )
{
vtPath.push_back( token );
token = strtok_s(NULL, sep, &next_token);
}
if ( vtPath.size() > 0 )
{
if ( vtPath[0] == "." )
vtPath.erase( vtPath.begin() );
}
// 核查所有路径是否存在
std::string strCurPath;
for( size_t i = 0; i < (int)vtPath.size(); ++i )
{
strCurPath += vtPath[i];
strCurPath += '\\';
if ( !FindOrCreateDirectory( strCurPath.c_str() ) )
{
return false;
}
}
return true;
}
int main()
{
char szPath[MAX_PATH] = "./main\\test\\hello/jump\\test\\";
CheckDirectory( szPath );
system("pause");
return 0;
}
#include
#include
using
//
bool
{
}
//
bool
{
}
int
{
}