出版

多くのアプリケーションは、FTP経由でファイルをアップロードおよびダウンロードする機能を必要とします。自動化されたプロセスでさえ、データ転送のためにFTPサーバーと定期的にやり取りします。Microsoftはこの点を認識し、開発者がこの機能を簡単に実装できるようにしています。このドキュメントでは、Microsoftが.NET Frameworkで提供している機能を活用する簡単な方法を紹介します。
多くのアプリケーションは、FTP経由でファイルをアップロードおよびダウンロードする機能を必要とします。自動化されたプロセスでさえ、データ転送のためにFTPサーバーと定期的にやり取りします。Microsoftはこの点を認識し、開発者がこの機能を簡単に実装できるようにしています。このドキュメントでは、Microsoftが.NET Frameworkで提供している機能を活用する簡単な方法を紹介します。
このブログ投稿は、TechRepublic のダウンロードとして PDF 形式でも入手可能で、これには、概説されている手法を説明するサンプル コードを含むサンプル Visual Studio ファイルが含まれています。
予備的な考え
ファイルの移動に入る前に、いくつか注意すべき点があります。
- 各リクエストには、CredentialsプロパティにNetworkCredentialsオブジェクトを関連付ける必要があります。これにより、FTPサーバーに対する認証方法がリクエストに指示されます。
- リクエストオブジェクトに提供されるURIには、アップロードまたはダウンロードするファイル名が含まれます。例えば、some.ftp.comから「data.xml」というファイルをダウンロードする場合、URIはftp://some.ftp.com/data.xmlとなります。
- Streamオブジェクトについて理解しておく必要があります。このオブジェクトは、ファイルのアップロードとダウンロードの両方で使用します。
これらは単純なので、「え、誰がそんなこと理解できるの?」と思うかもしれません。実は、私がFTPサーバーとの間でファイルをやり取りし始めた頃は、これらの概念の一部を理解していなかったので、重要だと思ったのです。それでは、コードを見てみましょう。
ファイルをダウンロードする
ファイルのダウンロードはアップロードよりもはるかに簡単なので、まずはダウンロードから始めましょう。WebClientオブジェクトを作成し、Credentialsプロパティにログイン情報を設定します。
次のステップは、WebClientオブジェクトのDownloadDataメソッドを呼び出し、ダウンロードしたいファイルのURIを指定することです。DownloadDataメソッドは、ダウンロードしたファイルを表すバイト配列を返します。このバイト配列がファイルに書き込まれると、ダウンロードが完了します。この処理の完全なコードは図Aに示されています。
図A
ファイルをダウンロードする
最後のfile.Close()呼び出しが重要であることに注意してください。この方法でファイルを開いた場合は必ず閉じてください。閉じないと、他のプロセスからファイルにアクセスできなくなります。ストリームを閉じると、変更内容がディスクにコミットされます。
ファイルをアップロード
ファイルのアップロードは、ファイルのダウンロードよりもはるかに複雑です。まず、2つのデータストリームを処理する必要があります。1つはFTP接続用、もう1つはディスクから読み込んでアップロードするファイル用です。
ファイルをアップロードする手順は次のとおりです。
- FtpWebRequestオブジェクトを作成する
- FtpWebRequest.MethodプロパティをUploadFileに設定する
- FtpWebRequest.Credentialsプロパティをログイン情報に設定します
- FtpWebRequestオブジェクトのリクエストストリームを取得します。これが書き込み先のストリームです。
- アップロードするファイルを開き、そのデータへのストリームを取得します。
- 入力ストリームからファイルのデータを読み取り、リクエストストリームに書き込みます。
- アップロードされたファイルのストリームとリクエストストリームを閉じます
このコードは図 Bに示されています。
図B
ファイルをアップロードする
ご覧のとおり、ファイルのダウンロードよりもアップロードに 2 倍以上のコード行数がかかります。
サンプルアプリケーションをダウンロードする
このブログ記事は、TechRepublic から PDF 形式でダウンロードできます。ダウンロードには、ここで概説したコーディング原則を網羅したサンプル Visual Studio プロジェクト ファイルが含まれています。サンプル プロジェクトには、この記事で紹介したすべてのコードと、プロジェクトで役立つ可能性のあるファイルのアップロード/ダウンロード インターフェイスが含まれています。
サンプル プロジェクトのインターフェースを図 Cに示します。
図C
サンプルプロジェクトインターフェース

zsbox-hotmail