我看不懂这段程序,谁能解释一下?

huang_2 2002-07-09 05:37:52
//DirectoryBox是一个ListBox控件,他显示的是FTP服务器的文件列表
//我主要看不太懂的是函数GetNameFromDirLine(Line, IsDirectory)里面那部分的代码
//GetNameFromDirLine的功能主要是判断当前选中的是文件还是文件夹

procedure TForm1.Button1Click(Sender: TObject);
var
Name,Line:string;
isDirectory:boolean;
begin
//如果没有建立连接则直接离开
if not IdFTP1.Connected then exit;
//把当前服务器列表中选中的 文件/文件夹 的名字赋值给 Line
Line:=DirectoryBox.Items[DirectoryBox.itemindex];
Name:=GetNameFromDirLine(Line, IsDirectory);
if IsDirectory then
ChangeDir(Name)
else
begin
SaveDialog1.FileName := Name;
if SaveDialog1.Execute then
begin
IdFTP1.TransferType := ftBinary;
BytesToTransfer := IdFTP1.Size(Name);
IdFTP1.Get(Name, SaveDialog1.FileName, true);
end;
end;
end;

//下面是两个函数的定义
//函数ChangeDir
procedure TForm1.ChangeDir(DirName: String);
begin
IdFTP1.ChangeDir(DirName);
IdFTP1.TransferType := ftASCII;
CurrentDir_Edit.Text := IdFTP1.RetrieveCurrentDir;
DirectoryBox.Items.Clear;
IdFTP1.List(DirectoryBox.Items);
end;

//函数GetNameFromDirLine
function TForm1.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;

{
其他方面的东西不用解释,我就是函数GetNameFromDirLine里面的东西看不懂,所以请帮我解释
GetNameFromDirLine函数里面的每一行代码的作用,为什么要这样写
}

...全文
19 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
BS 2002-07-09
  • 打赏
  • 举报
回复
莫名其妙,你看一下Line是什么样的字符串不就明白了,就是一个对字符串的操作,如果line第一个字符是‘d’,就吧Line的前几部分八删掉,剩下的返回,不是的话首先把Line的前三部分散掉,看第三部分开头是不是‘<DIR> ’如果是就把剩下的返回,不是再看第三部分的第一个字符,是[0..9]就把剩下的返回,不是就
同第一中情况,

//好辛苦,给我多加点分吧!
hzb 2002-07-09
  • 打赏
  • 举报
回复
function TForm1.GetNameFromDirLine(Line: String;
var IsDirectory: Boolean): String;
Var i:Integer;
DosListing:boolean
begin
IsDirectory:= Line[1]='d';//如果Line[1]是'd',则IsDirectory是true,否则为false
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>'; //从Line的第一个字符开始,到第一个' '结束的字符串,如果是<DIR>,则IsDirectory是true,否则是false
if not IsDirectory then
DosListing := Line[1] in ['0'..'9'] //如果不是目录,并且Line的第一个字符是 0到9,则DosListing是true,否则为false

else DosListing := true; end;
Delete(Line, 1, Pos(' ', Line)); //删除Line的第一个字符到第一个空格间的部分。
While Line[1] = ' ' do Delete(Line, 1, 1); //删除空格。
if DosListing and (i = 2) then break;
end;
Result:=true
end;
huang_2 2002-07-09
  • 打赏
  • 举报
回复
程序能正常运行,但我想弄明白这段函数的意思
//函数GetNameFromDirLine
function TForm1.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:=true
end;
hjd_cw 2002-07-09
  • 打赏
  • 举报
回复
有什么好解释的呢?调试一下不就明白了? :)
huang_2 2002-07-09
  • 打赏
  • 举报
回复
OGOGOGOGOGOG

5,402

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧