VC驿站

 找回密码
 加入驿站

QQ登录

只需一步,快速开始

搜索
查看: 694|回复: 8

VC驿站-(23)-文件夹的基本操作 里面代码的一个问题

[复制链接]
51_avatar_middle
最佳答案
0 
online_vip 发表于 2018-2-2 22:08:26 | 显示全部楼层 |阅读模式
本帖最后由 zxnnnnn 于 2018-2-5 08:16 编辑

标识红色字体的是不理解的部分


BOOL DeleteTargetFolder(LPCTSTR lpstrPath)
{
        CString strRootPath(lpstrPath);
        if (strRootPath[strRootPath.GetLength()-1] != '\\')         \\不理解这里面的strRootPath后面加[] 这个方括号是什么问题,我去查了CString的用法,没有看到CString对象加方括号的用法,求解这句话什么意思呢?
                strRootPath = strRootPath + _T("\\");

CFileFind mFinder;
        BOOL bFind = mFinder.FindFile(strRootPath + _T("*.*"), 0); //这句话的意思是理解的,如果在strRootPath这个路径下有文件或者夹的话,bFind返回值是1
        while (bFind){
                bFind = mFinder.FindNextFile();   // 如果里面文件的话,则bFind返回1
                if (mFinder.IsDots()){                     //不理解这里面返回的是C:\123.txt\.   第二次返回的是C:\123.txt\..  是什么意思,为什么是这样遍历的呢?
                        continue;




上一篇:C语言黑客教程的问题(为什么教程的后门只能在局域网实现功能,在不同网络的计算机不能
下一篇:为什么DLL加载资源文件失败
01_avatar_middle
最佳答案
0 
online_admins 发表于 2018-2-2 23:40:42 | 显示全部楼层
这个方括号是 CString 重载了 [] 操作符哦,是操作符的重载!
51_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2018-2-3 00:04:55 来自手机 | 显示全部楼层
admin 发表于 2018-2-2 23:40
这个方括号是 CString 重载了 [] 操作符哦,是操作符的重载!

老大,我试着百度了一下资料,没有找到关于CString重载方括号[]这部分的说明,能详细说说吗?或者能给我一个链接,我自己再学习学习吗?麻烦了。
94_avatar_middle
最佳答案
0 
在线会员 发表于 2018-2-3 10:43:54 | 显示全部楼层
本帖最后由 tym111 于 2018-2-3 10:48 编辑

if (strRootPath[strRootPath.GetLength()-1] != '\\')   这个就是判断strRootPath是不是已“\”结尾
                if (mFinder.IsDots())  这里返回会变是因为  bFind = mFinder.FindNextFile();    这里调用后会找下一个文件

C:\123.txt\.
C:\123.txt\..

这里的 . 是代表当前目录  ..是代表上一级目录   
01_avatar_middle
最佳答案
0 
online_admins 发表于 2018-2-3 21:58:00 | 显示全部楼层
zxnnnnn 发表于 2018-2-3 00:04
老大,我试着百度了一下资料,没有找到关于CString重载方括号[]这部分的说明,能详细说说吗?或者能给我 ...


这里有说明:
https://msdn.microsoft.com/en-us/library/aa315043(v=vs.60).aspx
51_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2018-2-4 06:56:40 来自手机 | 显示全部楼层
admin 发表于 2018-2-3 21:58
这里有说明:
https://msdn.microsoft.com/en-us/library/aa315043(v=vs.60).aspx

看到了,谢谢老大
51_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2018-2-5 08:16:12 | 显示全部楼层
tym111 发表于 2018-2-3 10:43
if (strRootPath[strRootPath.GetLength()-1] != '\\')   这个就是判断strRootPath是不是已“\”结尾
     ...

在网上也找到了,非常感谢,您的提示。
  IsDots()) 判断目录是否为“.”或".."

在dos中每个目录下都有缺省的两个目录分别为"."和".."分别表示上一层目录和本层目录.

因此当我们遍历目录树下的文件时要过滤掉这两个缺省目录。

每个文件夹都有下面两个特殊子文件夹:
      (1) .    表示本文件夹自己
      (2) ..   表示本文件夹的父文件夹
      显然,在文件夹遍历的时候,这两个子文件夹需要特殊处理,否则将陷入死循环。

IsDots():就是判断是不是这两个文件夹的一个.
51_avatar_middle
最佳答案
0 
ico_lz  楼主| 发表于 2018-2-5 08:21:22 | 显示全部楼层
http://bbs.csdn.net/topics/330060836

调用FindFile,只是用于得到第一个文件的位置(POSITION)
FindNextFile函数可以返回第一个文件的信息,并且将参数移动到下一个文件的位置
所以不是什么从第二个文件开始。
其实在CListCtrl等其它一些类中,也有类似的函数组合来获取多选信息。
您需要登录后才可以回帖 登录 | 加入驿站 qq_login

本版积分规则

关闭

站长提醒上一条 /2 下一条

QQ|小黑屋|手机版|VC驿站 ( 辽ICP备09019393号tongdun|网站地图wx_jqr

GMT+8, 2019-10-21 04:23

Powered by Discuz! X3.4

© 2009-2019 cctry.com

快速回复 返回顶部 返回列表