小问题,各位都帮忙看看

wenlz 2003-10-17 05:19:32
//m_lcDirDetails:CListCtrl控件
//strList:CStringList类,存放选定的目录
//功能:计算m_strList中的目录下的文件的个数和文件大小并显示在CListCtrl中
m_lcDirDetails.DeleteAllItems();
POSITION pos;
//for(pos=m_strList.GetHeadPosition();pos!=NULL;);
pos=m_strList.GetHeadPosition();//此两句用于代替
while(pos!=NULL) //上面的for语句
{
int nItem;
HANDLE hFind;
WIN32_FIND_DATA dataFind;
BOOL bMoreFiles=TRUE;
CString str,strFind;
str=m_strList.GetAt(pos);
nItem=m_lcDirDetails.InsertItem(0,str);
strFind=m_strMainDir + "\\"+str+"\\*.*";
hFind=FindFirstFile(strFind,&dataFind);
int nFileCount=0;
double nFileSize=0;
while(hFind!=INVALID_HANDLE_VALUE&&bMoreFiles==TRUE)
{
if(dataFind.dwFileAttributes==FILE_ATTRIBUTE_ARCHIVE)
{
nFileCount++;
nFileSize+=(dataFind.nFileSizeHigh*MAXDWORD+dataFind.nFileSizeLow);
}
bMoreFiles=FindNextFile(hFind,&dataFind);
}
FindClose(hFind);
str.Format("%ld",nFileCount);
m_lcDirDetails.SetItemText(nItem,1,str);
str.Format("%8.2f",nFileSize/1024.0);
m_lcDirDetails.SetItemText(nItem,2,str);
m_strList.GetNext(pos);
}
请问:为何上述代码中,用注释掉的for语句会死循环而进程死掉,改为上述代码中的有后注释的while语句则没问题?
...全文
39 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
wenlz 2003-10-17
  • 打赏
  • 举报
回复
to: liuxianhui(无知)
我想结贴,可系统提示我下面的信息,不让我结啊,不知道怎么办了
贴子回复次数大于跟给分次数
flyelf 2003-10-17
  • 打赏
  • 举报
回复
恭喜楼主 & 接分
liuxianhui 2003-10-17
  • 打赏
  • 举报
回复
//for(pos=m_strList.GetHeadPosition();pos!=NULL;);

改成:
for(pos=m_strList.GetHeadPosition();pos!=NULL;)
{
m_strList.GetNext(pos);
}

试试看。
wenlz 2003-10-17
  • 打赏
  • 举报
回复
白送20分没人要,我自己结了算了。
是我自己太粗心,FOR后面多加了一个;号

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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