<>第3版程序修正
发表在C语言图书答疑 2016-03-28
是否精华
版块置顶:
以下是我对<<Visual C++从入门到精通>>第3版中的光盘关于273页实践与练习第一道答案的完善。首先说明光盘程序中存在的问题:
  在《Visual C++从入门到精通》第3版的第273页 10.7实践与练习第一题,设计一个树控件来显示磁盘目录。
这题光盘上所给的答案有问题。问题出现在下面这串代码中,其中出错代码出现在OnSelchangedTrdisktree中:
while(1)

parent=m_trdisktree.GetParentItem(parent);
strparent=m_trdisktree.GetItemText(parent);
if(strparent.Find("\\")==2)
goto end;
temp+=strparent;
temp+="\\";

end:
CString root=m_trdisktree.GetItemText(parent);
lstr.Format("%s%s%s\\*.*",root,temp,rootstr);
问题就出现在上面这段代码中,当然我不得不承认这段代码设计确实挺巧妙的。但上面执行后
得到的中间路径是反向的,例如我们所点击的文件夹所在路径为D:\a\b\c\d也就是说我们正在点击d文件夹,此时
程序运行到这里后,temp得到的中间路径是,c\b\a\。很明显,这个路径的错误会影响后面一个循环对所点击
的文件夹中子文件夹的查找,其后果是就算d文件夹中有子文件夹,在树控件中也不会正常显示,该程序中只能显示到三级文件夹,就算第三级文件夹中有子文件夹,也不会在树控件中显示了。当然如果能把我上面所提到的问题解决,程序就变得比较完美了。
  下面就是我的修改方案:还是在OnSelchangedTrdisktree函数中,修改代码如下:
   int i=0;
CString strparent;
while(1)
{
parent=m_trdisktree.GetParentItem(parent);
strparent=m_trdisktree.GetItemText(parent);
if(strparent.Find("\\")==2)
goto end;
                temp[i]=strparent; 
     i++;   
                temp[i]="\\";   
      i++;       
}
end:
for(int n=0;n<i/2;n++){
CString t;
t=temp[n];
temp[n]=temp[i-n-1];
temp[i-n-1]=t;
}
for(int m=0;m<i;m++)temp1+=temp[m];
temp1+="\\";
CString root=m_trdisktree.GetItemText(parent);

lstr.Format("%s%s%s\\*.*",root,temp1,rootstr);
其中temp[MAX_PATH]和temp1声明在该函数前部代码如下:
CString temp[MAX_PATH],temp1;
  这样修改后程序就可以显示多级文件夹了。
 其实基本思路就是把所得到的字符串逆置
如谁更好的解决方案希望能分享一下,谢谢。
分享到:
精彩评论 1
大麦571
学分:1 LV1
2016-03-30
沙发
感谢你的分享   也谢谢你对我们的图书的支持   
首页上一页 1 下一页尾页 1 条记录 1/1页
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照