中易网

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

答案:3  悬赏:30  
解决时间 2021-04-29 00:37
  • 提问者网友:护她一生,唯爱
  • 2021-04-28 03:59
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]!='.') // 这里是什么意思
最佳答案
  • 二级知识专家网友:不服输就别哭
  • 2021-04-28 05:08
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]!='.') // 这里是什么意思 点代表当前目录 点点代表上级目录
全部回答
  • 1楼网友:浪者不回头
  • 2021-04-28 06:38
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]!='.') // 判断获得的这个文件名是不是“.",如果是"."实际上就是当前目录
  • 2楼网友:萝莉姐姐鹿小北
  • 2021-04-28 05:35
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]!='.') // 每个文件夹下都有个系统目录"..",这是为了过滤掉这个目录
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息!
大家都在看
推荐信息