请帮忙翻译几句c++的 语句 ,句柄什么的 完全 看不懂啊

charszFile[100];charszFind[MAX_PATH];WIN32_FIND_DATAFindFileData;//这里是什么意思memset(szFi... char szFile[100];
char szFind[MAX_PATH];
WIN32_FIND_DATA FindFileData;//这里是什么意思
memset(szFile,0,100);
strcpy(szFind,lpPath);
strcat(szFind,"//*.*"); // 这里是什么意思
HANDLE hFind=::FindFirstFile(szFind,&FindFileData);// 这里是什么意思
if(INVALID_HANDLE_VALUE == hFind) return 0; // 这里是什么意思
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) // 这里是什么意思
if(FindFileData.cFileName[0]!='.') // 这里是什么意思
展开
 我来答
veket的小号
2013-09-06 · TA获得超过3371个赞
知道大有可为答主
回答量:3762
采纳率:0%
帮助的人:3988万
展开全部
WIN32_FIND_DATA 描述 查到的 文件的信息的结构体...........
typedef struct _WIN32_FIND_DATA {
DWORD dwFileAttributes;
FILETIME ftCreationTime;
FILETIME ftLastAccessTime;
FILETIME ftLastWriteTime;
.....
}

strcat(szFind,"//*.*"); // 字符串拼接函数 C语言没学好?

HANDLE hFind=::FindFirstFile(szFind,&FindFileData);// 这里是什么意思

FindFirstFile函数 在一个目录查找文件名匹配指定名字的文件,它把子目录名也当做该目录下的文件名处理
The FindFirstFile function searches a directory for a file whose name matches the specified file name. FindFirstFile examines subdirectory names as well as file names.

HANDLE FindFirstFile(
LPCTSTR lpFileName, // 文件路径字符串 或路径的字符指针
LPWIN32_FIND_DATA lpFindFileData // 查到的 信息返回到这个指针指向的WIN32_FIND_DATA类型结构体变量中,所以传入了结构体变量的地址,&FindFileData
);
返回值 查找句柄 类似 fopen返回的文件句柄
fopen返回文件句柄 后续的文件读写fscanf、fprint利用文件句柄操作
同样 FindFirstFile 返回查找句柄 后续FindFirstFile查找 通过该句柄 操作........

If the function fails, the return value is INVALID_HANDLE_VALUE
如果返回值为宏常量 INVALID_HANDLE_VALUE 表示 FindFirstFile调用失败.......

if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) // 这里是什么意思
位运算 位与 c语言没学好?
FILE_ATTRIBUTE_DIRECTORY vc编辑器 选中 右键 转到定义/转到参考 vc自动帮你打开定为到 头文件里
或者cmd下 用finstr命令 查

以devcpp的头文件为例
C:\Documents and Settings\Administrator\桌面>cd c:\Dev-Cpp
C:\Dev-Cpp>cd include
C:\Dev-Cpp\include>findstr /n /s "FILE_ATTRIBUTE_ARCHIVE" *.h
winnt.h:240:#define FILE_ATTRIBUTE_ARCHIVE 0x00000020
ddk\winddk.h:206:#define FILE_ATTRIBUTE_ARCHIVE 0x00000020
C:\Dev-Cpp\include>

在devcpp的winnt.h中找到 一下几行
#define FILE_ATTRIBUTE_READONLY 0x00000001 标记只读位 32为整数的第1位
#define FILE_ATTRIBUTE_HIDDEN 0x00000002 标记隐藏位 32位整数的第2位
#define FILE_ATTRIBUTE_SYSTEM 0x00000004 系统属性 32为的第3位
#define FILE_ATTRIBUTE_DIRECTORY 0x00000010 文件夹 第5位
#define FILE_ATTRIBUTE_ARCHIVE 0x00000020
#define FILE_ATTRIBUTE_DEVICE 0x00000040
#define FILE_ATTRIBUTE_NORMAL 0x00000080

假设 查到的第一个是 只读的隐藏的文件夹
dwFileAttributes的二进制值 就是
0000 0000, 0000 0000,0000 0000,0001 0011
FILE_ATTRIBUTE_DIRECTORY是0x00000010
二进制为
0000 0000, 0000 0000,0000 0000,0001 0000
上面两个二进制&一下结果是
0000 0000, 0000 0000,0000 0000,0001 0000
非零为真

如果“文件”实际是 文件夹
dwFileAttributes的第5位就不是1而是零
显然 & 后 就是 0x00000000 零值为假

这样就可判断 查到的“文件名”到底是文件还是文件夹(目录)

if(FindFileData.cFileName[0]!='.') // 这里是什么意思 点代表当前目录 点点代表上级目录
sillvester
2013-09-06 · TA获得超过220个赞
知道小有建树答主
回答量:219
采纳率:0%
帮助的人:195万
展开全部
strcat(szFind,"//*.*"); // strcat是字符串连接,在szFind这个字符串后面加上"//*.*"
HANDLE hFind=::FindFirstFile(szFind,&FindFileData);// 这个是调用全局API函数FindFirstFile按照szFind这个查找字符串查找第一个文件,把文件信息放到FindFileData这个结构体里,并且返回句柄
if(INVALID_HANDLE_VALUE == hFind) return 0; // 如果上面的函数返回的句柄不可用,那么退出函数并且返回0
if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) // 比较FindFileData这个结构体里获得的文件属性信息,与FILE_ATTRIBUTE_DIRECTORY这个值相与来判断是否是一个目录
if(FindFileData.cFileName[0]!='.') // 判断获得的这个文件名是不是“.",如果是"."实际上就是当前目录
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
finder6666
2013-09-06 · TA获得超过338个赞
知道小有建树答主
回答量:208
采纳率:33%
帮助的人:140万
展开全部
WIN32_FIND_DATA FindFileData;//这里是什么意思,定义WIN32_FIND_DATA类型的数据
strcat(szFind,"//*.*"); // 这里是什么意思,前后两个字符串连接在一起

HANDLE hFind=::FindFirstFile(szFind,&FindFileData);// 这里是什么意思在目录里找第一个文件

if(INVALID_HANDLE_VALUE == hFind) return 0; // 这里是什么意思 如果没找到返回

if(FindFileData.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) // 这里是什么意思 如果找到的是一个文件夹

if(FindFileData.cFileName[0]!='.') // 每个文件夹下都有个系统目录"..",这是为了过滤掉这个目录
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式