Delphi 和 IdFtp - 如何将所有文件上传到目录中

标签 delphi ftp

我的目录中有几个 xml 文件,但我只能逐个文件发送。我想发送该目录中的所有文件。我怎样才能做到这一点?

idftp1.Put('C:\MyDir\*.xml','/xml/*.xml');

最佳答案

Indy 目前还没有实现任何类型的多重 put 方法(FTP 协议(protocol)本身没有这样的功能)。您必须列出给定目录中的所有文件并调用 Put分别为每个文件。例如:

procedure GetFileList(const Folder, Filter: string; FileList: TStrings);
var
  Search: TSearchRec;
begin
  if FindFirst(Folder + Filter, faAnyfile, Search) = 0 then
  try
    FileList.BeginUpdate;
    try
      repeat
        if (Search.Attr and faDirectory <> faDirectory) then
          FileList.Add(Search.Name);
      until
        FindNext(Search) <> 0;
    finally
      FileList.EndUpdate;
    end;
  finally
    FindClose(Search);
  end;
end;

procedure MultiStor(FTP: TIdFTP; const Folder: string; const Filter: string = '*.*');
var
  I: Integer;
  FileList: TStrings;
begin
  FileList := TStringList.Create;
  try
    GetFileList(Folder, Filter, FileList);
    for I := 0 to FileList.Count-1 do
      FTP.Put(Folder + FileList[I]);
  finally
    FileList.Free;
  end;
end;

或类似的最新 Delphi 版本:

procedure MultiStor(FTP: TIdFTP; const Folder: string; const Filter: string = '*.*');
var
  FileName: string;
begin
  for FileName in TDirectory.GetFiles(Folder, Filter) do
    FTP.Put(Folder + FileName);
end;

及其调用:

MultiStor(IdFTP1, 'C:\MyFolder\', '*.xml');

关于Delphi 和 IdFtp - 如何将所有文件上传到目录中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44486957/

相关文章:

sql-server - 在基础查询中使用 REPLACE 打开 TClientDataSet 时内存不足

delphi - 如何在TWebBrowser导航结束时以编程方式自动滚动到所需位置

delphi - Delphi 中不兼容的 char 和 widechar

ftp 服务器上的 Git 存储库

java - StaticUserAuthenticator 未在 VFS2 中设置 FTP 用户名

java - 使用 Apache Common Net 从 FTP 下载到设备的损坏的 PDF 文件

delphi - 我应该使用无符号整数来计算成员数量吗?

delphi - 为什么我的 TSplitter 位于错误的位置?

wordpress - 使用 Gulp 更新的 Gulp Vinyl FTP 没有注意到文件的变化,因此没有部署更新 : TIME ZONE ISSUE

linux - 如何获取文件仍然为 ftp 打开的信息