//根据当前目录获取本地的文件和目录信息procedure GetChildFilesInfo(pPath: PAnsiChar);
var
FirstHandle: THandle;
InvalidHandleNo: Integer;
FIleCount:Integer;
DirCount:Integer;
IsExist: LongBool;
begin
InvalidHandleNo := 0;
FirstHandle := 0;
StrCat(pPath, '*');
ZeroMemory(@gFindData, SizeOf(WIN32_FIND_DATA));
begin
FirstHandle := FindFirstFile(pPath, gFindData);
if FirstHandle = INVALID_HANDLE_VALUE then
showmessage('无效句柄')
else
begin
//同下
if gFindData.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY then
//如果是目录,记录
begin
StrLCopy(PChar(@DataFilesResult[i].DataFilePath), PChar(@gFindData.cFileName), MAX_PATH);
Inc(DirCount);
end
else
//如果是文件,详细记录
begin
StrLCopy(PChar(@DataFilesResult[i].DataFilePath), PChar(@gFindData.cFileName), MAX_PATH);
Inc(FileCount);
end
end;
while True do
begin
IsExist := FindNextFile(FirstHandle, gFindData);
if IsExist = False then
Break
else
begin
begin
//注意此处,gFindData.dwFileAttributes的值,出现过16,22,32。
//据windows下的定义,不会出现22才对。只能是2的n此方。。一直郁闷
//求高人帮忙,或者大家看代码那块不对。
if gFindData.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY then
//如果是目录,记录
begin
StrLCopy(PChar(@DataFilesResult[i].DataFilePath), PChar(@gFindData.cFileName), MAX_PATH);
Inc(DirCount);
end
else
//如果是文件,记录
begin
StrLCopy(PChar(@DataFilesResult[i].DataFilePath), PChar(@gFindData.cFileName), MAX_PATH);
Inc(FileCount);
end
end;
end
end;
end
end;//如果是代码问题,请问大家,怎么修改。
//或者大家有自己的实现的好方法
var
FirstHandle: THandle;
InvalidHandleNo: Integer;
FIleCount:Integer;
DirCount:Integer;
IsExist: LongBool;
begin
InvalidHandleNo := 0;
FirstHandle := 0;
StrCat(pPath, '*');
ZeroMemory(@gFindData, SizeOf(WIN32_FIND_DATA));
begin
FirstHandle := FindFirstFile(pPath, gFindData);
if FirstHandle = INVALID_HANDLE_VALUE then
showmessage('无效句柄')
else
begin
//同下
if gFindData.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY then
//如果是目录,记录
begin
StrLCopy(PChar(@DataFilesResult[i].DataFilePath), PChar(@gFindData.cFileName), MAX_PATH);
Inc(DirCount);
end
else
//如果是文件,详细记录
begin
StrLCopy(PChar(@DataFilesResult[i].DataFilePath), PChar(@gFindData.cFileName), MAX_PATH);
Inc(FileCount);
end
end;
while True do
begin
IsExist := FindNextFile(FirstHandle, gFindData);
if IsExist = False then
Break
else
begin
begin
//注意此处,gFindData.dwFileAttributes的值,出现过16,22,32。
//据windows下的定义,不会出现22才对。只能是2的n此方。。一直郁闷
//求高人帮忙,或者大家看代码那块不对。
if gFindData.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY then
//如果是目录,记录
begin
StrLCopy(PChar(@DataFilesResult[i].DataFilePath), PChar(@gFindData.cFileName), MAX_PATH);
Inc(DirCount);
end
else
//如果是文件,记录
begin
StrLCopy(PChar(@DataFilesResult[i].DataFilePath), PChar(@gFindData.cFileName), MAX_PATH);
Inc(FileCount);
end
end;
end
end;
end
end;//如果是代码问题,请问大家,怎么修改。
//或者大家有自己的实现的好方法
解决方案 »
- dephi子窗口与主窗口的问题
- 怎么在一个程序中显示两个(鼠标)光标
- 使用TIdTCPClient连接server时界面总有冻结的现象,求助!
- 在三层重新连接时候不成功,请教!
- 注册表的操作问题?+鼠标按下有反应
- ado连接access后,执行sql语句有问题
- 获取BDE数据表的密码
- 很不明白,delphi +ado + access 报的 Invalid variant type conversion 错误,
- 谁有report machine报表的帮助文档(中文)
- Delphi中Spcomm使用属性及用法详解
- Delphi工作一年多了,打算月底辞职,不知道现在外面找工作怎么样???、
- 结构体或者类如何用到属性编辑器中
if (gFindData.dwFileAttributes and FILE_ATTRIBUTE_DIRECTORY) <> 0 then
#define FILE_SHARE_WRITE 0x00000002
#define FILE_SHARE_DELETE 0x00000004
#define FILE_ATTRIBUTE_READONLY 0x00000001
#define FILE_ATTRIBUTE_HIDDEN 0x00000002
#define FILE_ATTRIBUTE_SYSTEM 0x00000004
#define FILE_ATTRIBUTE_DIRECTORY 0x00000010
#define FILE_ATTRIBUTE_ARCHIVE 0x00000020
#define FILE_ATTRIBUTE_ENCRYPTED 0x00000040
#define FILE_ATTRIBUTE_NORMAL 0x00000080
#define FILE_ATTRIBUTE_TEMPORARY 0x00000100
#define FILE_ATTRIBUTE_SPARSE_FILE 0x00000200
#define FILE_ATTRIBUTE_REPARSE_POINT 0x00000400
#define FILE_ATTRIBUTE_COMPRESSED 0x00000800
#define FILE_ATTRIBUTE_OFFLINE 0x00001000
#define FILE_ATTRIBUTE_NOT_CONTENT_INDEXED 0x00002000
#define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001
#define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002
#define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004
#define FILE_NOTIFY_CHANGE_SIZE 0x00000008
#define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010
#define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020
#define FILE_NOTIFY_CHANGE_CREATION 0x00000040
#define FILE_NOTIFY_CHANGE_SECURITY 0x00000100
#define FILE_ACTION_ADDED 0x00000001
#define FILE_ACTION_REMOVED 0x00000002
#define FILE_ACTION_MODIFIED 0x00000003
#define FILE_ACTION_RENAMED_OLD_NAME 0x00000004
#define FILE_ACTION_RENAMED_NEW_NAME 0x00000005
#define MAILSLOT_NO_MESSAGE ((DWORD)-1)
#define MAILSLOT_WAIT_FOREVER ((DWORD)-1)
#define FILE_CASE_SENSITIVE_SEARCH 0x00000001
#define FILE_CASE_PRESERVED_NAMES 0x00000002
#define FILE_UNICODE_ON_DISK 0x00000004
#define FILE_PERSISTENT_ACLS 0x00000008
#define FILE_FILE_COMPRESSION 0x00000010
#define FILE_VOLUME_QUOTAS 0x00000020
#define FILE_SUPPORTS_SPARSE_FILES 0x00000040
#define FILE_SUPPORTS_REPARSE_POINTS 0x00000080
#define FILE_SUPPORTS_REMOTE_STORAGE 0x00000100
#define FILE_VOLUME_IS_COMPRESSED 0x00008000
#define FILE_SUPPORTS_OBJECT_IDS 0x00010000
#define FILE_SUPPORTS_ENCRYPTION 0x00020000 虽然delphi 的基本定义数值是2的n次方。但是
这个记录型变量返回的结果是多个值逻辑位或出来的结果所以楼主你在比较的时候,不能单独去用等于。
因为你只需要判断其中的一个位就可以了。不管其他的。
就用delphi的and就可以了。