.NET TIPS WebRequest/WebResponseクラスでFTPによりファイル転送を行うには?[2.0のみ、C#、VB]デジタルアドバンテージ 遠藤 孝信2006/06/16 |
|
|
「TIPS:WebClientクラスでFTPによりファイル転送を行うには?」では、WebClientクラスを使ってFTPのファイル転送を簡単に行う方法について解説しているが、HTTPの場合と同様に、WebRequest/WebResponseクラス(System.Net名前空間)を利用して、より細かな制御を行いながらFTPを行うことも可能だ(参考:「TIPS:WebRequest/WebResponseクラスでWebページを取得するには?」)。
本稿ではWebRequest/WebResponseクラスを用いたFTPによる基本的なファイルのダウンロード/アップロードついて解説する。
FTPによるファイルのダウンロード
WebRequest/WebResponseクラスでFTPを行う場合にも、基本的なプログラムの構造はHTTP(Webページ)の場合と変わらず、まずWebRequestクラスのCreateメソッドにより「リクエスト」であるWebRequestオブジェクトを作成する。
WebRequest req = WebRequest.Create("ftp://……")
このときパラメータにHTTPのURL(http://〜)を指定すると、リクエストの実体はHttpWebRequestクラスのオブジェクトとなるが、FTPのURL(ftp://〜)を指定した場合には、それはFtpWebRequestクラスのオブジェクトとなる(ともにWebRequestクラスの派生クラス)。つまり、Createメソッドはパラメータで指定されたURLのスキーム部分(httpやftpなどのプロトコル指定部分)により、リクエストとして作成するオブジェクトを判断するわけだ。
FTPサーバにアクセスするためのユーザー名とパスワードは、前掲のTIPSと同様に、NetworkCredentialクラス(System.Net名前空間)のオブジェクトを作成し、Credentialsプロパティに設定しておく。
req.Credentials = new NetworkCredential("ユーザー名", "パスワード")
次に、FTPのアクセスで用いるアクション(コマンド)をMethodプロパティに設定する。これに設定する値は、WebRequestMethods.Ftpクラス(System.Net名前空間)*のパブリックなフィールドから選択する。このクラスでは、FTPサーバ上のファイル一覧を取得する「ListDirectory」や、ディレクトリを作成する「MakeDirectory」などのフィールドが定義されている。
* このクラスはWebRequestMethodsクラス内で定義されている入れ子クラス(インナー・クラス)である。 |
ここではファイルのダウンロードを行うので、以下のように「DownloadFile」を指定する。ただしこの設定がWebRequestクラスのデフォルトであるため、ダウンロードの場合に限りMethodプロパティの設定は省略できる。
req.Method = WebRequestMethods.Ftp.DownloadFile
以上でリクエストの作成は完了だ。次にWebRequestオブジェクトのGetResponseメソッドを呼び出し、「レスポンス」であるWebResponseオブジェクトを取得する。FTPサーバへの通信はこの時点で開始される。
WebResponse res = req.GetResponse()
レスポンスが正しく得られれば、後はGetResponseStreamメソッドによりFTPサーバ上のファイルに対するストリームを取得できるので、それを少しずつ読み出しながら、ローカル・ファイルに順次書き込んでいけばよい。
以下にWebRequest/WebResponseクラスを使ってFTPでダウンロードを行うサンプル・プログラムを示す。このプログラムは前掲のTIPSで示したダウンロードを行うサンプル・プログラムと同じ動作をする。
| |
WebRequest/WebResponseクラスによりFTPでダウンロードを行うC#のサンプル・プログラム(ftpwebget.cs) | |
| |
WebRequest/WebResponseクラスによりFTPでダウンロードを行うVBのサンプル・プログラム(ftpwebget.vb) | |
FTPによるファイルのアップロード
ファイルのアップロードを行う場合には、先ほどと同様にしてWebRequestオブジェクトを作成し、Methodプロパティには「WebRequestMethods.Ftp.UploadFile」を指定する。
そしてWebRequestオブジェクトのGetRequestStreamメソッドを呼び出し、今度はリクエストに対するストリームを取得する。この時点でFTPサーバへの通信は開始される。
後はローカル・ファイルを読み込みながら、取得したストリームにそのデータを書き込めばよい。単にファイルをアップロードするだけなら、WebResponseクラスの利用は不要だ。
以下にWebRequestクラスを使ってFTPでアップロードを行うサンプル・プログラムを示す。
| |
WebRequestクラスによりFTPでアップロードを行うC#のサンプル・プログラム(ftpwebput.cs) | |
| |
WebRequestクラスによりFTPでアップロードを行うVBのサンプル・プログラム(ftpwebput.vb) | |
なお、FTPによるファイル転送にはバイナリ・モードとアスキー・モード(テキスト・モード)の2つがあるが、本稿ではバイナリ・ファイルを転送するため、すべてバイナリ・モードを使用している(このモードがデフォルト)。アスキー・モードによる転送を行うには、FtpWebRequestオブジェクト(WebRequestオブジェクトをFtpWebRequest型にキャストする)のUseBinaryプロパティにfalseを設定すればよい。
ちなみに、FTPによる接続は再利用される。このため連続してファイルのダウンロードを行う場合などは、1つ目のダウンロードまでには時間がかかるが2つ目以降は速くなるはずだ。
利用可能バージョン:.NET Framework 2.0のみ カテゴリ:クラス・ライブラリ 処理対象:ネットワーク 使用ライブラリ:WebRequestクラス(System.Net名前空間) 使用ライブラリ:WebResponseクラス(System.Net名前空間) 使用ライブラリ:NetworkCredentialクラス(System.Net名前空間) 使用ライブラリ:FtpWebRequestクラス(System.Net名前空間) 使用ライブラリ:WebRequestMethods.Ftpクラス(System.Net名前空間) 関連TIPS:WebClientクラスでFTPによりファイル転送を行うには? 関連TIPS:WebRequest/WebResponseクラスでWebページを取得するには? |
|
「.NET TIPS」 |
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|