一、在MFC中如何在指定目录下查找文件
MFC中可以利用CFileFind 函数执行在特定目录下查找文件的任务。
//---------------------------------------------
//=Function Name: FindFinleInDir
//=Description: 在特定目录下递归查找文件
//=Parameter: pszFileName 要查找的文件名
//=Parameter: pszDir 要在哪个目录下查找
//=Parameter: arFindResult 查找的结果保存在这个数组
//=Parameter: int iRecursionCount 递归查找的深度,0代表在当前目录下查找;大于0代表递归深度;-1代表递归到最后一层。
//---------------------------------------------
void FindFinleInDir(const TCHAR* pszFileName,const TCHAR* pszDir,std::vector<CString>& arFindResult,int iRecursionCount)
{
if(_tcscmp(pszFileName,_T(""))==0) //如果要查找的文件名为空,直接返回
return;
CString sWildcard(pszDir);
if(sWildcard.Right(1)!=_T("\\"))
sWildcard+=_T("\\"); //保证目录以'\'结尾
sWildcard+=_T("*.*"); //加上通配符
CFileFind cFinder;
BOOL bWorking = cFinder.FindFile(sWildcard); //开启一个搜索
while(bWorking)
{
bWorking = cFinder.FindNextFile();
if(cFinder.IsDots()) //如果是'.'或者'..'
continue;
else if(cFinder.IsDirectory()) //如果是一个子目录
{
if(-1 == iRecursionCount)
{
FindFinleInDir(pszFileName,cFinder.GetFilePath(),arFindResult,iRecurse);
}
else if(iRecursionCount > 0)
{
FindFinleInDir(pszFileName,cFinder.GetFilePath(),arFindResult,iRecurse - 1);
}
}
else
{
CString strrr=cFinder.GetFileName();
if(pszFileName==cFinder.GetFileName())
arFindResult.push_back(cFinder.GetFilePath());
}
}
cFinder.Close(); //关闭查找
}
二、如何确定某个文件是否存在、或者是否具有某种读写模式
可以利用C标准库中的_access函数。
int _access( const char *path, int mode );
参数:path:文件或者目录的路径;mode:读/写属性
当文件具有指定的读写属性时,函数返回0;如果文件不存在或者没有指定的读写属性时,返回-1。
其中,mode的参数可以是以下类型:
mode value Checks file for 00 Existence only 02 Write-only 04 Read-only 06 Read and write
以下代码是MSDN给出的示例。
#include <io.h>
#include <stdio.h>
#include <stdlib.h>
int main( void )
{
// Check for existence.
if( (_access( "crt_ACCESS.C", 0 )) != -1 )
{
printf_s( "File crt_ACCESS.C exists.\n" );
// Check for write permission.
// Assume file is read-only.
if( (_access( "crt_ACCESS.C", 2 )) == -1 )
printf_s( "File crt_ACCESS.C does not have write permission.\n" );
}
}