我用
IdFTP1.Host:='127.0.0.1';
IdFTP1.Username:='user';
IdFTP1.Password:='user';
IdFTP1.Connect(true,-1);
IdFTP1.Get('123.txt','d:/123.txt',true);
只能复制单个文件,
如何能复制某个指定文件夹里的所有文件啊?翻了以前很多的帖子,说的模模糊糊的,有人能指点下吗?
IdFTP1.Host:='127.0.0.1';
IdFTP1.Username:='user';
IdFTP1.Password:='user';
IdFTP1.Connect(true,-1);
IdFTP1.Get('123.txt','d:/123.txt',true);
只能复制单个文件,
如何能复制某个指定文件夹里的所有文件啊?翻了以前很多的帖子,说的模模糊糊的,有人能指点下吗?
for j:=0 to IdFTP1.DirectoryListing.Count-1 do
begin
LFileName:=IdFTP1.DirectoryListing.Items[j].FileName;
IdFTP1.Get(LFileName,本地文件名,true);
end;
label
Files;
var
i, DirCount: integer;
ss, tt, LogFile: string;
ftpModifyDate, FileModifyDate: TDateTime;
IsNeedDownLoad: Boolean;
begin
LogFile := LocalDir + 'AutoUpdate.log';
Label4.Caption := '远程文件夹:' + RemoteDir;
if UpperCase(RemoteDir) <> UpperCase(FTP_SOFTPATH) then
begin
if not DirectoryExists(LocalDir + RemoteDir) then
ForceDirectories(LocalDir + RemoteDir);
end;
idFTP1.ChangeDir(RemoteDir);
Application.ProcessMessages;
idFTP1.List(nil);
DirCount := idFTP1.DirectoryListing.Count;
if DirCount = 0 then
begin
idFTP1.ChangeDirUp;
idFTP1.List(nil);
Application.ProcessMessages;
end;
for i := 0 to DirCount - 1 do
begin
ss := idFTP1.DirectoryListing[i].FileName;
ftpModifyDate := idFTP1.DirectoryListing[i].ModifiedDate;
if DirCount <> idFTP1.DirectoryListing.Count then
begin
repeat
idFTP1.ChangeDirUp;
idFTP1.List(nil);
Application.ProcessMessages;
until DirCount = idFTP1.DirectoryListing.Count;
end;
if idFTP1.DirectoryListing[i].ItemType = ditDirectory then
begin
if (ss <> '.') and
(ss <> '..') then
begin
if UpperCase(RemoteDir) <> UpperCase(FTP_SOFTPATH) then
begin
FTP_DownloadDir(ss, LocalDir +
RemoteDir + '\');
end
else
FTP_DownloadDir(ss, LocalDir);
end;
end
else
begin
if UpperCase(RemoteDir) <> UpperCase(FTP_SOFTPATH) then
label2.Caption := LocalDir + RemoteDir +
'\' + ss
else
label2.Caption := LocalDir + ss;
BytesToTransfer := IdFTP1.Size(ss);
if UpperCase(ss) = 'AUTOUPDATE.EXE' then
tt := 'AutoUpdate.new'
else
tt := ss;
if UpperCase(RemoteDir) <> UpperCase(FTP_SOFTPATH) then
FileModifyDate := GetFileModifyDate(LocalDir + RemoteDir + '\' + tt)
else
FileModifyDate := GetFileModifyDate(LocalDir + tt);
if FileModifyDate < ftpModifyDate then
IsNeedDownLoad := True;
if IsNeedDownLoad then
begin
if not IsFileInUse(tt) = True then
begin
try
WriteLogFile(Format('%s下载文件:%s(本地文件日期:%s,远程文件日期:%s)',
[FormatDateTime('YYYY-MM-DD HH:MM:SS:ZZZZ ', Now()), ss,
FormatDateTime('YYYY-MM-DD HH:MM:SS:ZZZZ', FileModifyDate),
FormatDateTime('YYYY-MM-DD HH:MM:SS:ZZZZ', ftpModifyDate)]),
LogFile);
if UpperCase(RemoteDir) <> UpperCase(FTP_SOFTPATH) then
idFTP1.Get(ss, LocalDir + RemoteDir + '\' + tt, true)
else
idFTP1.Get(ss, LocalDir + tt, true);
except
on E: Exception do
begin
ErrMsg(E.Message);
end;
end;
end;
end;
Application.ProcessMessages;
if i = DirCount - 1 then
begin
idFTP1.ChangeDirUp;
idFTP1.List(nil);
Application.ProcessMessages;
end;
end;
end;
end;