首页上一页 1 下一页尾页 1 条记录 1/1页
光盘答案出错
发表在C语言图书答疑
2016-02-02
是否精华
是
否
版块置顶:
是
否
在《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文件夹中有子文件夹,在树控件中也不会正常显示,该程序中只能显示到三级文件夹,就算第三级文件夹中有子文件夹,也不会在树控件中显示了。当然如果能把我上面所提到的问题解决,程序就变得比较完美了。即也就是想办法把这个中间路径变成正序,c\b\a\变成a\b\c\。这个问题我已经想了挺久,实在找不到解决的办法,所以只能来这里发帖子,求高手赐教,谢谢。
这题光盘上所给的答案有问题。问题出现在下面这串代码中,其中出错代码出现在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文件夹中有子文件夹,在树控件中也不会正常显示,该程序中只能显示到三级文件夹,就算第三级文件夹中有子文件夹,也不会在树控件中显示了。当然如果能把我上面所提到的问题解决,程序就变得比较完美了。即也就是想办法把这个中间路径变成正序,c\b\a\变成a\b\c\。这个问题我已经想了挺久,实在找不到解决的办法,所以只能来这里发帖子,求高手赐教,谢谢。