DOBON.NET プログラミング道: .NET Framework, VB.NET, C#, Visual Basic, Visual Studio, インストーラ, ...

WebClientを使ってFTPサーバーからファイルをダウンロード、アップロードする

注意:ここで紹介している方法は、.NET Framework 2.0以降でのみ使用できます。.NET Framework 1.1以前でFTPサーバーにアクセスする方法は、「[HOWTO] Visual Basic .NET を使用してプラグ可能なプロトコルを記述し、マネージ クラスで FTP をサポートする方法」や「Visual Basic .NET または Visual Basic 2005 を使用して FTP サイトにアクセスする方法」などをご覧ください。

.NET Framework 2.0からは、WebClientクラスを使って簡単にFTPサーバーからファイルをダウンロード、またはFTPサーバーにファイルをアップロードすることができるようになりました。

FTPサーバーからファイルをダウンロードする

ファイルをダウンロードし保存する」で紹介した方法と全く同じです。WebClient.DownloadFileメソッドを使えば、簡単です。

下記の例では、"ftp://localhost/test.txt"からファイルをダウンロードして、"C:\test.txt"に保存しています。

VB.NET
コードを隠すコードを選択
'WebClientオブジェクトを作成
Dim wc As New System.Net.WebClient()
'ログインユーザー名とパスワードを指定
wc.Credentials = New System.Net.NetworkCredential("username", "password")
'FTPサーバーからダウンロードする
wc.DownloadFile("ftp://localhost/test.txt", "C:\test.txt")
'解放する
wc.Dispose()
C#
コードを隠すコードを選択
//WebClientオブジェクトを作成
System.Net.WebClient wc = new System.Net.WebClient();
//ログインユーザー名とパスワードを指定
wc.Credentials = new System.Net.NetworkCredential("username", "password");
//FTPサーバーからダウンロードする
wc.DownloadFile("ftp://localhost/test.txt", @"C:\test.txt");
//解放する
wc.Dispose();

FTPサーバーにファイルをアップロードする

"multipart/form-data"でデータを送信する」の「WebClientを使った方法」と同じで、WebClient.UploadFileメソッドを使ってファイルをアップロードすることができます。

次の例では、"C:\test.txt"を"ftp://localhost/test.txt"にアップロードしています。

VB.NET
コードを隠すコードを選択
'WebClientオブジェクトを作成
Dim wc As New System.Net.WebClient()
'ログインユーザー名とパスワードを指定
wc.Credentials = New System.Net.NetworkCredential("username", "password")
'FTPサーバーにアップロード
wc.UploadFile("ftp://localhost/test.txt", "C:\test.txt")
'解放する
wc.Dispose()
C#
コードを隠すコードを選択
//WebClientオブジェクトを作成
System.Net.WebClient wc = new System.Net.WebClient();
//ログインユーザー名とパスワードを指定
wc.Credentials = new System.Net.NetworkCredential("username", "password");
//FTPサーバーにアップロード
wc.UploadFile("ftp://localhost/test.txt", @"C:\test.txt");
//解放する
wc.Dispose();

STOUやAPPEコマンドでFTPサーバーにアップロードする

WebClient.UploadFileメソッドの第2引数に"WebRequestMethods.Ftp.UploadFileWithUniqueName"を指定することにより、"STOU"(重複しないファイル名で保存)コマンドでFTPサーバーにアップロードすることができます。また、"WebRequestMethods.Ftp.AppendFile"を指定することにより、"APPE"(追加書き込み)コマンドでFTPサーバーにアップロードすることもできます。何も指定しないと、"STOR"コマンドでアップロードします。これらのコマンドについて詳しくは、こちらをご覧ください。

WebClientクラスの仕様

上記のようにWebClientクラスを使ってFTPサーバーにアクセスする時、WebClientクラスは内部でFtpWebRequestとFtpWebResponseクラスを使用しています。FtpWebRequestとFtpWebResponseクラスを使用してファイルをダウンロード、アップロードする方法はこちらで説明していますが、WebClientクラスでも同じようなことを行っています。ただし、細かい設定は指定できず、FtpWebRequestのデフォルトの設定がそのまま使われます。つまり、PASVモードが有効(FtpWebRequest.UsePassiveプロパティがTrue)で、バイナリモード(FtpWebRequest.UseBinaryプロパティがTrue)となります。さらに、FtpWebRequest.KeepAliveプロパティがTrueのため、WebClient.Disposeメソッドを呼び出してもログアウトしません。

これらの設定を変更したいのであれば、こちらのように、FtpWebRequestクラスをお使いください。

  • 履歴:
  • 2010/12/1 FtpWebRequest.KeepAliveプロパティのデフォルトがFalseとなっていたのを修正。

注意:この記事では、基本的な事柄の説明が省略されているかもしれません。初心者の方は、特に以下の点にご注意ください。

  • このサイトで紹介されているコードの多くは、例外処理が省略されています。例外処理については、こちらをご覧ください。
  • Windows Vista以降でUACが有効になっていると、ファイルへの書き込みに失敗する可能性があります。詳しくは、こちらをご覧ください。
  • .NET Tipsをご利用いただく際は、注意事項をお守りください。