void CScaner::FindInAll(LPCTSTR lpszPath)
{
TCHAR szFind[MAX_PATH];
TCHAR szFileType[6];
lstrcpy(szFind, lpszPath);
if (!IsRoot(szFind))
lstrcat(szFind, _T("\\"));
lstrcat(szFind, _T("*.*"));
WIN32_FIND_DATA wfd;
HANDLE hFind = FindFirstFile(szFind, &wfd);
if (hFind == INVALID_HANDLE_VALUE)
return;
TCHAR szFile[MAX_PATH];
do
{
if (wfd.cFileName[0] == _T('.'))
continue;
if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if (IsRoot(lpszPath))
{
wsprintf(szFile, _T("%s%s"), lpszPath, wfd.cFileName);
}
else
{
wsprintf(szFile, _T("%s\\%s"), lpszPath, wfd.cFileName);
FindInAll(szFile);
}
}
else
{
if (IsRoot(lpszPath))
wsprintf(szFile, _T("%s%s"), lpszPath, wfd.cFileName);
else
wsprintf(szFile, _T("%s\\%s"), lpszPath, wfd.cFileName);
GetFileExtType(szFileType,szFile); //获取文件后缀名
if( _tcsicmp(szFileType, _T("doc") ) == 0 || _tcsicmp(szFileType,_T("pdf") ) == 0
|| _tcsicmp(szFileType, _T("xls") ) == 0 || _tcsicmp(szFileType,_T("txt") ) == 0 )
IsBlackList(szFile);
//MessageBox(NULL, szFile, _T("Find"), MB_OK);
}
}while (FindNextFile(hFind, &wfd));
}void CScaner::GetFileExtType(TCHAR * tTpye,TCHAR* szFile)
{
int iEnd = _tcslen(szFile);
int i = iEnd - 1;
for(;i > 0; --i)
{
if(szFile[i] == '.')
{
break;
}
if((iEnd - i) > 5)
return;
} int j = 0;
for(; j < iEnd - i -1; ++j)
{
tTpye[j] = szFile[i + j + 1];
}
tTpye[j] = '\0';
}
程序开头循环的时候都不会出错,当扫描过N个文件之后,突然弹出提示框,叫我输入wslen.c和wsicmp.c的文件路径。而且感觉这个错误时随机的,要运行过N行代码后出现。我就在这两个函数中用到_tcslen和_tcsicmp。不知道啥毛病,请大哥们赐教!
{
TCHAR szFind[MAX_PATH];
TCHAR szFileType[6];
lstrcpy(szFind, lpszPath);
if (!IsRoot(szFind))
lstrcat(szFind, _T("\\"));
lstrcat(szFind, _T("*.*"));
WIN32_FIND_DATA wfd;
HANDLE hFind = FindFirstFile(szFind, &wfd);
if (hFind == INVALID_HANDLE_VALUE)
return;
TCHAR szFile[MAX_PATH];
do
{
if (wfd.cFileName[0] == _T('.'))
continue;
if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if (IsRoot(lpszPath))
{
wsprintf(szFile, _T("%s%s"), lpszPath, wfd.cFileName);
}
else
{
wsprintf(szFile, _T("%s\\%s"), lpszPath, wfd.cFileName);
FindInAll(szFile);
}
}
else
{
if (IsRoot(lpszPath))
wsprintf(szFile, _T("%s%s"), lpszPath, wfd.cFileName);
else
wsprintf(szFile, _T("%s\\%s"), lpszPath, wfd.cFileName);
GetFileExtType(szFileType,szFile); //获取文件后缀名
if( _tcsicmp(szFileType, _T("doc") ) == 0 || _tcsicmp(szFileType,_T("pdf") ) == 0
|| _tcsicmp(szFileType, _T("xls") ) == 0 || _tcsicmp(szFileType,_T("txt") ) == 0 )
IsBlackList(szFile);
//MessageBox(NULL, szFile, _T("Find"), MB_OK);
}
}while (FindNextFile(hFind, &wfd));
}void CScaner::GetFileExtType(TCHAR * tTpye,TCHAR* szFile)
{
int iEnd = _tcslen(szFile);
int i = iEnd - 1;
for(;i > 0; --i)
{
if(szFile[i] == '.')
{
break;
}
if((iEnd - i) > 5)
return;
} int j = 0;
for(; j < iEnd - i -1; ++j)
{
tTpye[j] = szFile[i + j + 1];
}
tTpye[j] = '\0';
}
程序开头循环的时候都不会出错,当扫描过N个文件之后,突然弹出提示框,叫我输入wslen.c和wsicmp.c的文件路径。而且感觉这个错误时随机的,要运行过N行代码后出现。我就在这两个函数中用到_tcslen和_tcsicmp。不知道啥毛病,请大哥们赐教!
void CScaner::FindInAll(LPCTSTR lpszPath)
{
TCHAR szFind[MAX_PATH];
TCHAR szFileType[6];
lstrcpy(szFind, lpszPath);
if (!IsRoot(szFind))
lstrcat(szFind, _T("\\"));
lstrcat(szFind, _T("*.*"));
WIN32_FIND_DATA wfd;
HANDLE hFind = FindFirstFile(szFind, &wfd);
if (hFind == INVALID_HANDLE_VALUE)
return; TCHAR szFile[MAX_PATH];
do
{
if (wfd.cFileName[0] == _T('.'))
continue;
if (wfd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)
{
if (IsRoot(lpszPath))
{
wsprintf(szFile, _T("%s%s"), lpszPath, wfd.cFileName);
}
else
{
wsprintf(szFile, _T("%s\\%s"), lpszPath, wfd.cFileName);
FindInAll(szFile);
}
}
else
{
if (IsRoot(lpszPath))
wsprintf(szFile, _T("%s%s"), lpszPath, wfd.cFileName);
else
wsprintf(szFile, _T("%s\\%s"), lpszPath, wfd.cFileName);
GetFileExtType(szFileType, szFile); //获取文件后缀名
MessageBox(NULL, szFile, szFileType, MB_OK);
if (_tcsicmp(szFileType, _T("doc")) ==
0 ||
_tcsicmp(szFileType,
_T("pdf")) ==
0 ||
_tcsicmp(szFileType,
_T("xls")) ==
0 ||
_tcsicmp(szFileType,
_T("txt")) ==
0)
IsBlackList(szFile);
//MessageBox(NULL, szFile, _T("Find"), MB_OK);
}
}
while (FindNextFile(hFind, &wfd));
FindClose(hFind);
}