delphi demo里的代码,显示如何判断list回来的目录信息里的一行是否目录及得到子目录(或文件)名 你只要针对每个目录反复changedir、list及判断就能得到所有的目录名 不要告诉我你需要所有的代码function GetNameFromDirLine(Line: String; Var IsDirectory: Boolean): String; Var i: Integer; DosListing: Boolean; begin IsDirectory := Line[1] = 'd'; DosListing := false; for i := 0 to 7 do begin if (i = 2) and not IsDirectory then begin IsDirectory := Copy(Line, 1, Pos(' ', Line) - 1) = '<DIR>'; if not IsDirectory then DosListing := Line[1] in ['0'..'9'] else DosListing := true; end; Delete(Line, 1, Pos(' ', Line)); While Line[1] = ' ' do Delete(Line, 1, 1); if DosListing and (i = 2) then break; end; Result := Line; end;
2)如果服务器支持List —aL参数,就直接可以获得完整目录以及子目录的列表
对于搜索也很适用
还有一些如‘.’ ‘..’的目录,必须处理
还有那些每个目录都有返回根目录的目录,递归时也容易陷入死循环。
另外对于‘.lnk’的目录处理也容易出问题。
要求递归时要对相对路径检查,否则完蛋。
你只要针对每个目录反复changedir、list及判断就能得到所有的目录名
不要告诉我你需要所有的代码function GetNameFromDirLine(Line: String; Var IsDirectory: Boolean): String;
Var
i: Integer;
DosListing: Boolean;
begin
IsDirectory := Line[1] = 'd';
DosListing := false;
for i := 0 to 7 do begin
if (i = 2) and not IsDirectory then begin
IsDirectory := Copy(Line, 1, Pos(' ', Line) - 1) = '<DIR>';
if not IsDirectory then
DosListing := Line[1] in ['0'..'9']
else DosListing := true;
end;
Delete(Line, 1, Pos(' ', Line));
While Line[1] = ' ' do Delete(Line, 1, 1);
if DosListing and (i = 2) then break;
end;
Result := Line;
end;