关于_tcsicmp的错误

cj1205 2010-04-22 02:57:01
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。不知道啥毛病,请大哥们赐教!
...全文
1163 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
cj1205 2010-04-23
  • 打赏
  • 举报
回复
调试了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);
}
cj1205 2010-04-22
  • 打赏
  • 举报
回复
更新了下代码,网络硬盘的链接:http://pickup.mofile.com/1504992491978080
cj1205 2010-04-22
  • 打赏
  • 举报
回复
哪位老大,哪位帅哥,哪位美女有空帮我看看吧,谢过
尹成 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 cj1205 的回复:]
= =,vs。net也没有,郁闷,看不出来哪里错了,如果是边界错误应该会有提示吧
[/Quote]是的有提示
cj1205 2010-04-22
  • 打赏
  • 举报
回复
= =,vs。net也没有,郁闷,看不出来哪里错了,如果是边界错误应该会有提示吧
Eleven 2010-04-22
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 cj1205 的回复:]
就是调试的时候出来的,也没标志是哪一行出错了。前面运行的好好的,扫描过N个文件都没出错,突然就提示缺少那两个文件,大大你运行下看看
我贴了代码了
[/Quote]
我没有你的环境啊。。。
cj1205 2010-04-22
  • 打赏
  • 举报
回复
就是调试的时候出来的,也没标志是哪一行出错了。前面运行的好好的,扫描过N个文件都没出错,突然就提示缺少那两个文件,大大你运行下看看
我贴了代码了
Eleven 2010-04-22
  • 打赏
  • 举报
回复
突然弹出提示框??哪里来的提示框???
cj1205 2010-04-22
  • 打赏
  • 举报
回复
我发了源代码出来,请好心人帮我看看吧,急。。。http://pickup.mofile.com/6859521818993864

2,640

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 硬件/系统
社区管理员
  • 硬件/系统社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧