//////////////////////////////////////////////////////////////////////////
//检查某个文件,或目录是否存在
//bIsDirCheck=TRUE指定检查的对象是目录,反之文件
BOOL FileExists(LPCTSTR lpszFileName,BOOL bIsDirCheck)
{
//试图取得文件属性
DWORD dwAttributes=GetFileAttributes(lpszFileName);
if (dwAttributes==0xFFFFFFFF)//INVALID_FILE_ATTRIBUTES
{
return FALSE;
}
if((dwAttributes&&FILE_ATTRIBUTE_DIRECTORY)==FILE_ATTRIBUTE_DIRECTORY)
{
if (bIsDirCheck)
{
return TRUE;
}
else
{
return FALSE;
}
}
else
{
if (!bIsDirCheck)
{
return TRUE;
}
else
return FALSE;
}
}
//////////////////////////////////////////////////////////////////////////
//删除指定目录下的所有文件和子目录
void RecursiveDelete(CString szPath)
{
CFileFind fileFind;
CString strPath=szPath;
//说明要查找此目录下的所有文件
if(strPath.Right(1)!="\\")
strPath+="\\";
strPath+="*.*";
BOOL bRet;
if (fileFind.FindFile(strPath))
{
do
{
bRet=fileFind.FindNextFile();
if(fileFind.IsDots())//目录为"." 或者是".."?
continue;
strPath=fileFind.GetFilePath();
if (!fileFind.IsDirectory())
{
//删除此文件
::SetFileAttributes(strPath,FILE_ATTRIBUTE_NORMAL);
::DeleteFile(strPath);
}
else
{
//递归调用
RecursiveDelete(strPath);
//删除此目录
::SetFileAttributes(strPath,FILE_ATTRIBUTE_NORMAL);
::RemoveDirectory(strPath);
}
} while (bRet);
}
}
//////////////////////////////////////////////////////////////////////////
//检查文件是不是有效的PE文件
BOOL isPEFile(CString strPath)
{
//打开检查文件
HANDLE hFile=::CreateFile(strPath,GENERIC_READ,
FILE_SHARE_READ,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL);
if(hFile==INVALID_HANDLE_VALUE)
AfxMessageBox("无效文件!");
//定义PE文件中的DOS头和NT头
IMAGE_DOS_HEADER dosHeader;
IMAGE_NT_HEADERS ntHeader;
//验证过程
BOOL bValid=FALSE;
DWORD dwRead;
//读取DOS头
::ReadFile(hFile,&dosHeader,sizeof(dosHeader),&dwRead,NULL);
if (dwRead==sizeof(dosHeader))
{
if (dosHeader.e_magic==IMAGE_DOS_SIGNATURE)
{
//定义NT头
if (::SetFilePointer(hFile,dosHeader.e_lfanew,NULL,FILE_BEGIN))
{
//读取NT头
ReadFile(hFile,&ntHeader,sizeof(ntHeader),&dwRead,NULL);
if (dwRead==sizeof(ntHeader))
{
if(ntHeader.Signature==IMAGE_NT_SIGNATURE)
bValid=TRUE;
}
}
}
}
return bValid;
}