1
ディレクトリ内に複数のxmlファイルがありますが、ファイルごとにしかファイルを送信できません。私はそのディレクトリ内にあるすべてのファイルを送信したいと思います。これどうやってするの?DelphiとIdFtp - ディレクトリにすべてのファイルをアップロードする方法
idftp1.Put('C:\MyDir\*.xml','/xml/*.xml');
ディレクトリ内に複数のxmlファイルがありますが、ファイルごとにしかファイルを送信できません。私はそのディレクトリ内にあるすべてのファイルを送信したいと思います。これどうやってするの?DelphiとIdFtp - ディレクトリにすべてのファイルをアップロードする方法
idftp1.Put('C:\MyDir\*.xml','/xml/*.xml');
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');
2番目の例では、リストにファイルを収集し、リストを反復します。最初の例は、 'TStringList'のように同じことをする必要があります。 –
@Remy、それは単純化のためだった。しかし、あなたは正しい、これら2つのタスクは分離(固定)する必要があります。 – Victoria