我使用deelx正则库进行文件格式的匹配,但是正则式里只要包含了[]这类复合型匹配就不正确.
例如下面的代码,我对PE头(MZ)进行匹配.如果只匹配"MZ."可以,但是加上后面的[]就不正确了.void CTellFileTypeDlg::AnalysisFile(LPCTSTR strFilePath)
{
HANDLE hFile = CreateFile(strFilePath,
GENERIC_READ,
FILE_SHARE_READ|FILE_SHARE_WRITE,
0,
OPEN_EXISTING,
0,0);
if(hFile == INVALID_HANDLE_VALUE)
return; DWORD dwBytesRead = 0;
char* lpBuffer = (char*)GlobalAlloc(GPTR, 20);
ReadFile(hFile,
lpBuffer,
20,
&dwBytesRead,
NULL);

char cFileType[2];

CRegexpT <char> regexp("MZ.[\x00-\x02]",0);
MatchResult result = regexp.Match(lpBuffer); if(result.IsMatched())
GetDlgItem(IDC_FILETYPE)->SetWindowText("是");
else
GetDlgItem(IDC_FILETYPE)->SetWindowText("不是");
}