最新问答 更多

关注我们

关注我们

了解我们的产品和服务,有任何疑问、意见或合作需求,可关注本微博与我们在线沟通。

盒子问答悬赏微博

[单人中标] 遍历当前目录获取文件信息,调试过程中发现dwFileAttributes出现各种奇怪的值

分享任务:
问题已结束!
10
发布者 code112
浏览量
回答数 0

任务详情

//根据当前目录获取本地的文件和目录信息

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;

//如果是代码问题,请问大家,怎么修改。
//或者大家有自己的实现的好方法
x
您的任务被发布者审核为不合格

原因

详细说明

关于盒子问答
盒子问答为广大程序员提供一个迅速解决问题的好途径,帮助有编程疑惑的程序员轻松发问答。同时授业解惑的人,可以得到相应的收入。帮人解答并赚钱就来盒子问答。
联系我们
我们的服务支持邮件:webmaster@2ccc.com,支持qq:161945
如有建议或意见,可通过右侧“用户反馈”告诉我们
收藏本站
用户反馈