正文

个老问题:搜索文件(包含子目录名) 2005-09-26 13:01:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/iamben250/5351.html

分享到:

一个老问题:搜索文件(包含子目录名) 


 


 

'这个问题我在论坛发过帖子
'现在这个帖子找不到了
'这是重新优化过的过程
'CALL absolute 过程是由QB45提供的
'这个过程能够搜索到当前路径下的所有文件名及子目录名(不管文件什么属性)
'如果在根目录,也能够获得分区的卷标名

DEFINT A-Z
FUNCTION Dirs$ (Path AS STRING, Attr AS INTEGER, Size as LONG)
'******************************************************
'  搜索目录下的所有文件和文件夹,适用7.1和4.5版本
'  Attr位 8=卷标 16=目录 其他为文件
'  第一次调用时Path为要搜索的路径,第二次调用时Path请置空
'  返回:Attr=文件属性  Size=文件长度
'******************************************************
STATIC Lc AS INTEGER
STATIC ErrCode AS INTEGER
STATIC FileDATA AS STRING * 44
STATIC FirstCode AS STRING * 28
STATIC NextCode AS STRING * 18
STATIC FileName AS STRING * 64
IF Lc = 0 THEN
      Lc = 1
      DIM AsmCode AS STRING * 12
      '=================================================================
      MID$(AsmCode, 1, 3) = CHR$(&H68) + MKI$(VARSEG(FileDATA))
      MID$(AsmCode, 4, 1) = CHR$(&H1F)
      MID$(AsmCode, 5, 3) = CHR$(&HBA) + MKI$(VARPTR(FileDATA))
      MID$(AsmCode, 8, 2) = CHR$(&HB4) + CHR$(&H1A)
      MID$(AsmCode, 10, 2) = CHR$(&HCD) + CHR$(&H21)
      MID$(AsmCode, 12, 1) = CHR$(&HCB)
      '=================================================================
   
      DEF SEG = VARSEG(AsmCode): CALL ABSOLUTE(VARPTR(AsmCode)): DEF SEG
      '=================================================================
      MID$(FirstCode, 4, 1) = CHR$(&H1F)
      MID$(FirstCode, 8, 3) = CHR$(&HB8) + CHR$(&H0) + CHR$(&H4E)
      MID$(FirstCode, 11, 3) = CHR$(&HB9) + MKI$(255)
      MID$(FirstCode, 14, 2) = CHR$(&HCD) + CHR$(&H21)
      MID$(FirstCode, 16, 3) = CHR$(&H68) + MKI$(VARSEG(ErrCode))
      MID$(FirstCode, 19, 1) = CHR$(&H1F)
      MID$(FirstCode, 20, 2) = CHR$(&H72) + CHR$(&H2)
      MID$(FirstCode, 22, 2) = CHR$(&H33) + CHR$(&HC0)
      MID$(FirstCode, 24, 1) = CHR$(&H3E)
      MID$(FirstCode, 25, 3) = CHR$(&HA3) + MKI$(VARPTR(ErrCode))
      MID$(FirstCode, 28, 1) = CHR$(&HCB)
      
      '=================================================================
      MID$(NextCode, 1, 3) = CHR$(&HB8) + CHR$(&H0) + CHR$(&H4F)
      MID$(NextCode, 4, 2) = CHR$(&HCD) + CHR$(&H21)
      MID$(NextCode, 6, 3) = CHR$(&H68) + MKI$(VARSEG(ErrCode))
      MID$(NextCode, 9, 1) = CHR$(&H1F)
      MID$(NextCode, 10, 2) = CHR$(&H72) + CHR$(&H2)
      MID$(NextCode, 12, 2) = CHR$(&H33) + CHR$(&HC0)
      MID$(NextCode, 14, 1) = CHR$(&H3E)
      MID$(NextCode, 15, 3) = CHR$(&HA3) + MKI$(VARPTR(ErrCode))
      MID$(NextCode, 18, 1) = CHR$(&HCB)
      '=================================================================
END IF

IF Path$ <> "" THEN
      FileName = Path + CHR$(0)

      MID$(FirstCode, 1, 3) = CHR$(&H68) + MKI$(VARSEG(FileName))
      MID$(FirstCode, 5, 3) = CHR$(&HBA) + MKI$(VARPTR(FileName))

      DEF SEG = VARSEG(FirstCode)
      CALL ABSOLUTE(VARPTR(FirstCode)): DEF SEG

      IF ErrCode THEN EXIT FUNCTION
ELSE

      DEF SEG = VARSEG(NextCode)
      CALL ABSOLUTE(VARPTR(NextCode)): DEF SEG

      IF ErrCode THEN EXIT FUNCTION
END IF

File$ = MID$(FileDATA, 31)
Dirs$ = LEFT$(File$, INSTR(File$, CHR$(0)) - 1)
Attr% = ASC(MID$(FileDATA, 22, 1))
Size& = CVL(MID$(FileDATA, 27, 4))
END FUNCTION 

阅读(2754) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册