起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 411|回复: 18

【结贴】取某目录下的子目录问题

[复制链接]
发表于 2009-11-30 10:20:59 | 显示全部楼层 |阅读模式
sr: TSearchRec;

1.if SysUtils.FindFirst(LocalPath+'\*.*',SysUtils.faDirectory,sr)=0 then
2.SysUtils.FindNext(sr);
第一句 是取指定目录下的所有子目录
第二句 是在这些子目录里逐个取吧
不知道我理解的对不对

但是 我这里 SysUtils.FindNext(sr); 连文件也取到了

还有 FindNext 如果目录下有长文件名(超过32,汉字算两个),
就报错,
相同的代码 用delphi 运行 没问题,
是什么原因啊,什么解决方法,目前这个比较急,客户急的要,
已经拖了一周了。
回复

使用道具 举报

发表于 2009-11-30 11:45:04 | 显示全部楼层
楼主,找到个例子,你参考一下,这个方法是遍历所有的子目录后,再删除


procedure   DeleteDir(sDirectory:   String);
  //删除目录和目录下得所有文件和文件夹
  var
      sr:   TSearchRec;
      sPath,sFile:   String;
  begin
      //检查目录名后面是否有   '\'
      if   Copy(sDirectory,Length(sDirectory),1)   <>   '\'   then
          sPath   :=   sDirectory   +   '\'
      else
          sPath   :=   sDirectory;

      //------------------------------------------------------------------
      if   FindFirst(sPath+'*.*',faAnyFile,   sr)   =   0   then
      begin
          repeat
              sFile:=Trim(sr.Name);
              if   sFile='.'   then   Continue;
              if   sFile='..'   then   Continue;

              sFile:=sPath+sr.Name;
              if   (sr.Attr   and   faDirectory)<>0   then
                  DeleteDir(sFile)
              else   if   (sr.Attr   and   faAnyFile)   =   sr.Attr   then
                  DeleteFile(sFile);                                                 //删除文件
          until   FindNext(sr)   <>   0;
          FindClose(sr);
      end;
      RemoveDir(sPath);
      //------------------------------------------------------------------
  end;}
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-11-30 13:38:54 | 显示全部楼层
我试试 ,等下反馈
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-11-30 13:49:22 | 显示全部楼层
问题出来了,如果目录下面有长文件名(文件长度大于32 位,一个汉字算两位,不包括扩展名)
会报错!  帮我看看是什么原因? 谢谢。
回复 支持 反对

使用道具 举报

发表于 2009-11-30 14:09:34 | 显示全部楼层
请问楼主执行到哪句报错?可以去google上找找相关的资料
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-11-30 15:11:24 | 显示全部楼层
FindNext(sr)  当取文件长度超过32的就报错

snap1.jpg

13.07 KB, 下载次数: 160

回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-11-30 16:54:56 | 显示全部楼层
哪位大哥帮我在x3上测试下, 谢谢啦!
我一般也很少问问题。
回复 支持 反对

使用道具 举报

发表于 2009-11-30 17:47:21 | 显示全部楼层
好,回头我测试一下,有结果马上跟贴告知,
回复 支持 反对

使用道具 举报

 楼主| 发表于 2009-12-1 10:09:46 | 显示全部楼层
在线等。。。。。。
回复 支持 反对

使用道具 举报

发表于 2009-12-1 11:37:13 | 显示全部楼层
这几个函数是不能用的,平台不支持调用,不过类似的逻辑可以用如下的代码来实现!
也就是用文件系统FileSys.FileSystem的实现来做这种逻辑!
var
  sr: Tstrings;
begin
  Sr := TStringList.Create;
  try
//  FileSys.FileSystem.GetFileList('File:\C:\', Sr);
  FileSys.FileSystem.SearchFile('File:\C:\', FileSys.SearchFileParam('&raquo;&brvbar;&para;&laquo;*.*', False), sr);
  Dialogs.ShowMessage(sr[0]);
  finally
    sr.Free;
  end;
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-7-13 22:56 , Processed in 0.042594 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

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