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。不知道啥毛病,请大哥们赐教!

解决方案 »

  1.   

    我发了源代码出来,请好心人帮我看看吧,急http://pickup.mofile.com/6859521818993864 
      

  2.   

    = =,vs。net也没有,郁闷,看不出来哪里错了,如果是边界错误应该会有提示吧
      

  3.   

    更新了下代码,网络硬盘的链接:http://pickup.mofile.com/1504992491978080 
      

  4.   

    调试了N次,发现:错误时发生在所有文档检测完成的时候,难道没办法正常退出?我加了FindClose(hFind);结果还是不行,郁闷。
    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);
    }