2017-06-11 17 views

答えて

5

Indyは現在のところ、何らかの種類の複数のputメソッドを実装していません(FTPプロトコル自体にはそのような機能はありません)。指定したディレクトリ内のすべてのファイルを一覧表示し、ファイルごとに個別に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'); 
+1

2番目の例では、リストにファイルを収集し、リストを反復します。最初の例は、 'TStringList'のように同じことをする必要があります。 –

+0

@Remy、それは単純化のためだった。しかし、あなたは正しい、これら2つのタスクは分離(固定)する必要があります。 – Victoria

関連する問題