Dos单元 MSDoc函数如何使用?
pascal吧
全部回复
仅看楼主
level 8
cpc___y 楼主
我希望能像SysUtils里findfirst、findnext那样查找文件夹。
2014年01月30日 06点01分 1
level 14
SysUtils里findfirst、findnext怎么用,求教。
2014年01月30日 11点01分 2
level 6
楼主,是MSDos吧,它是用来调用中断号为21H的dos中断的。其实FindFirst,FindNext(DOS单元)用的也是DOS中断。
。。。。。。都不会去查RTL.PDF的?
2014年02月04日 14点02分 3
打错了,不好意思
2014年02月05日 04点02分
level 6
实在不知道楼主的问题怎么解答,楼主自己研究下源码:
procedure FindFirst(Path: PChar; Attr: Word; var F: TSearchRec); assembler;
asm
PUSHDS
LDSDX,F
MOVAH,1AH
INT21H
POPDS
LESDI,Path
MOVCX,Attr
MOVAH,4EH
CALLAnsiDosFunc
JC@@1
{$IFDEF Windows}
LESDI,F
ADDDI,OFFSET TSearchRec.Name
PUSHES
PUSHDI
PUSHES
PUSHDI
CALLOemToAnsi
{$ENDIF}
XORAX,AX
@@1:MOVDosError,AX
end;
procedure FindNext(var F: TSearchRec); assembler;
asm
PUSHDS
LDSDX,F
MOVAH,1AH
INT21H
POPDS
MOVAH,4FH
INT21H
JC@@1
{$IFDEF Windows}
LESDI,F
ADDDI,OFFSET TSearchRec.Name
PUSHES
PUSHDI
PUSHES
PUSHDI
CALLOemToAnsi
{$ENDIF}
XORAX,AX
@@1:MOVDosError,AX
end;
2014年02月05日 02点02分 4
呃~表示汇编看不懂,不过我发现可以用exec('cmd.exe','/c tree >某文件');也可以做到,虽然有点累。
2014年02月05日 04点02分
level 12
依稀记得dos单元的findfirst可以找文件夹
uses dos;
var F:SearchRec;
begin
findfirst('*.*',Archive,F);
while DosError=0 do
begin
writeln(F.name);
findnext(F);
end;
findclose(F);
end.
这是一些dos单元常数,
readonly 只读文件 $01
hidden 隐藏文件 $02
sysfile 系统文件 $04
volumeid 卷标 $08
directory 目录 $10
archive 存档 $20
anyfile 上述任何特殊文件 $3F
如果用findfirst招anyfile的话,会先找到文件夹,再找到其他文件
2014年02月08日 03点02分 6
1