.NET TIPS

WebClientクラスでFTPによりファイル転送を行うには?[2.0のみ、C#、VB]

デジタルアドバンテージ 遠藤 孝信
2006/06/16

 「TIPS:WebClientクラスでWebページを取得するには?」では、WebClientクラス(System.Net名前空間)を使ってWebサーバ上のデータをダウンロードする簡便な方法を示しているが、.NET Framework 2.0ではこのWebClientクラスがFTPプロトコルにも対応している。

 本稿では、WebClientクラスを使ったFTPによるファイルのダウンロード/アップロードについてまとめる。

FTPによるファイルのダウンロード

 FTPによりファイルのダウンロードを行う場合にも、Webの場合と同様にDownloadFileメソッドが利用できる。このメソッドの第1パラメータにはダウンロードするファイルのURLを指定するが、FTPの場合にはこれを以下のような形式のURLで指定する。

ftp://<FTPサーバ名>/<ファイルのパス>

 例えば、「ftp.microsoft.com」という名前のFTPサーバの「developr」ディレクトリにあるファイル「readme.txt」は以下のようなURLとなる(このURLは実際にアクセス可能)。

ftp://ftp.microsoft.com/developr/readme.txt

 また、FTPサーバにアクセスする場合には通常、ユーザー名とパスワードによる認証が必要になるが、この認証情報はあらかじめWebClientオブジェクトのCredentialsプロパティに設定しておく必要がある。.NETではネットワーク・アクセスに用いられる認証情報は、NetworkCredentialクラス(System.Net名前空間)のオブジェクトで表される。

 以下にWebClientクラスによりFTPでダウンロードを行うサンプル・プログラムを示す。

// wcftpget.cs

using System.Net;

class WebClientFtpGet {
  static void Main() {
    WebClient wc = new WebClient();
    wc.Credentials = new NetworkCredential("user01", "mypassword");
    wc.DownloadFile("ftp://servername/pub/secret.png", "tmp.png");
  }
}

// コンパイル方法:csc wcftpget.cs
WebClientクラスによりFTPでダウンロードを行うC#のサンプル・プログラム(wcftpget.cs)

' wcftpget.vb

Imports System.Net

Class WebClientFtpGet
  Shared Sub Main()
    Dim wc As New WebClient()
    wc.Credentials = New NetworkCredential("user01", "mypassword")
    wc.DownloadFile("ftp://servername/pub/secret.png", "tmp.png")
  End Sub
End Class

' コンパイル方法:vbc wcftpget.vb
WebClientクラスによりFTPでダウンロードを行うVBのサンプル・プログラム(wcftpget.vb)

 このサンプル・プログラムでは、ユーザー名「user01」、パスワード「mypassword」というアカウントでFTPサーバ「servername」にログインし、pubディレクトリにあるファイル「secret.png」をダウンロードして、「tmp.png」というファイル名でカレント・ディレクトリに保存する。

FTPによるファイルのアップロード

 WebClientクラスではFTPによりファイルをアップロードするのも簡単で、DownloadFileメソッドの替わりにUploadFileメソッドを利用するだけだ。

 以下のサンプル・プログラムでは、カレント・ディレクトリにあるファイル「tmp.png」を、FTPサーバの「upload」ディレクトリに「secret.png」というファイル名でアップロードする。

// wcftpput.cs

using System.Net;

class WebClientFtpPut {
  static void Main() {
    WebClient wc = new WebClient();
    wc.Credentials = new NetworkCredential("user01", "mypassword");
    wc.UploadFile("ftp://servername/upload/secret.png", "tmp.png");
  }
}

// コンパイル方法:csc wcftpput.cs
WebClientクラスによりFTPでアップロードを行うC#のサンプル・プログラム(wcftpput.cs)

' wcftpput.vb

Imports System.Net

Class WebClientFtpPut
  Shared Sub Main()
    Dim wc As New WebClient()
    wc.Credentials = New NetworkCredential("user01", "mypassword")
    wc.UploadFile("ftp://servername/upload/secret.png", "tmp.png")
  End Sub
End Class

' コンパイル方法:vbc wcftpput.vb
WebClientクラスによりFTPでアップロードを行うVBのサンプル・プログラム(wcftpput.vb)

 なお、このサンプル・プログラムを連続して実行した場合には2回目以降で例外が発生すると思われるが、これはたいていのFTPサーバで、すでにあるファイルへの上書きがエラーとなるためだ。実際に試す場合にはこの点に注意しておいてほしい。

 ちなみに、Credentialsプロパティを設定せずにFTPサーバにアクセスした場合には、デフォルトでユーザー名「anonymous」、パスワード「anonymous@」が使用される。

 また、WebRequest/WebResponseクラスを使ってFTPを行う方法については「TIPS:WebRequest/WebResponseクラスでFTPによりファイル転送を行うには?」で解説している。End of Article

利用可能バージョン:.NET Framework 2.0のみ
カテゴリ:クラス・ライブラリ 処理対象:ネットワーク
使用ライブラリ:WebClientクラス(System.Net名前空間)
使用ライブラリ:NetworkCredentialクラス(System.Net名前空間)
関連TIPS:WebClientクラスでWebページを取得するには?
関連TIPS:WebRequest/WebResponseクラスでFTPによりファイル転送を行うには?

この記事と関連性の高い別の.NET TIPS
WebRequest/WebResponseクラスでFTPによりファイル転送を行うには?
FTPでエラーが発生した場合に生のメッセージを取得するには?
FTP時にディレクトリの存在を調べるには?
サーバにより指定されたファイル名でファイルをダウンロードして保存するには?
WebRequest/WebResponseクラスでWebページを取得するには?
このリストは、(株)デジタルアドバンテージが開発した
自動関連記事探索システム Jigsaw(ジグソー) により自動抽出したものです。
generated by

「.NET TIPS」


Insider.NET フォーラム 新着記事
  • 第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用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間