Delphi5でIndy(IdFTP)を使用してFTP接続でファイルをダウンロードする
古きよきDelphi5でFTP接続をしてファイルをダウンロードするサンプルです。コンポーネントはIndyのIdFTPを使用します。Indyのインストール方法から解説しますので直ぐに試す事ができます。
開発環境
今回はDelphi5ですが、それ以外の環境でもほぼインストール可能だと思います。
1.Indyのダウンロード
1.1 Indyの公式へアクセスします。
1.2 Indy.Sockets (VCL)をクリックします。
1.3 その次にページ下部にあるDownloadsをクリックします。
1.4 今回はVersion 10 - Latest releaseを使用します。
1.5 Source Code をクリックするとダウンロード開始です。
2.Indyのインストール
ダウンロードしたファイルを展開します。
2.1 dpkファイルをインストールする その1
インストールする前にオプションで「設計/実行時とも使用可能」にします。
・indy10.0.52_source\System\IndySystem50.dpk
・indy10.0.52_source\Core\IndyCore50.dpk
・indy10.0.52_source\Protocols\IndyProtocols50.dpk
2.2 dpkファイルをインストールする その2
次はオプションを変更せずにそのままインストールします。
・indy10.0.52_source\Core\dclIndyCore50.dpk
・indy10.0.52_source\Protocols\dclIndyProtocols50.dpk
2.3 ツール→環境オプションでライブラリパスにパスを追加する
※もっとスマートに出来ると思います。久しぶりにDelphiを触ったもので・・
2.4 インストール完了
インストールするとこんな感じになります。
3.FTP接続してファイルをダウンロードする
下図のようにコンポーネントを配置します。(IdFTPはIndy Clientsにあります)
procedure TForm1.Button1Click(Sender: TObject); var srcFile,dstFile: String; Stream : TMemoryStream; begin // FTPログインの基本設定 IdFTP1.Host := ''; IdFTP1.Username := ''; IdFTP1.Password := ''; srcFile := '/data/test.txt'; // 読み込むファイル名 dstFile := 'C:\data\test.txt'; // 書き込むファイル名 try IdFTP1.Connect; except IdFTP1.Disconnect; ShowMessage('FTP接続に失敗しました。'); Exit; end; // ファイルのダウンロード Stream := TMemoryStream.Create; try try IdFTP1.Get(srcFile, Stream); except end; if (Stream.Size<>0) then Stream.SavetoFile(dstFile) else ShowMessage('ファイルが見つかりませんでした。'); finally Stream.free; end; IdFTP1.Disconnect; end;
あとがき
FTP接続はIDやパスワードが悪意のある第三者に盗聴される可能性が高いです。オープンな環境で無い場合はできるだけSFTP/FTPS接続を使用して下さい。但し、IndyでSFTP/FTPS接続が可能かは確認しておりませんのでご了承下さい。