注意:ここで紹介している方法は、.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サーバーにファイルをアップロードすることができるようになりました。
「ファイルをダウンロードし保存する」で紹介した方法と全く同じです。WebClient.DownloadFileメソッドを使えば、簡単です。
下記の例では、"ftp://localhost/test.txt"からファイルをダウンロードして、"C:\test.txt"に保存しています。
'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()
//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();
「"multipart/form-data"でデータを送信する」の「WebClientを使った方法」と同じで、WebClient.UploadFileメソッドを使ってファイルをアップロードすることができます。
次の例では、"C:\test.txt"を"ftp://localhost/test.txt"にアップロードしています。
'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()
//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();
WebClient.UploadFileメソッドの第2引数に"WebRequestMethods.Ftp.UploadFileWithUniqueName"を指定することにより、"STOU"(重複しないファイル名で保存)コマンドでFTPサーバーにアップロードすることができます。また、"WebRequestMethods.Ftp.AppendFile"を指定することにより、"APPE"(追加書き込み)コマンドでFTPサーバーにアップロードすることもできます。何も指定しないと、"STOR"コマンドでアップロードします。これらのコマンドについて詳しくは、こちらをご覧ください。
上記のようにWebClientクラスを使ってFTPサーバーにアクセスする時、WebClientクラスは内部でFtpWebRequestとFtpWebResponseクラスを使用しています。FtpWebRequestとFtpWebResponseクラスを使用してファイルをダウンロード、アップロードする方法はこちらで説明していますが、WebClientクラスでも同じようなことを行っています。ただし、細かい設定は指定できず、FtpWebRequestのデフォルトの設定がそのまま使われます。つまり、PASVモードが有効(FtpWebRequest.UsePassiveプロパティがTrue)で、バイナリモード(FtpWebRequest.UseBinaryプロパティがTrue)となります。さらに、FtpWebRequest.KeepAliveプロパティがTrueのため、WebClient.Disposeメソッドを呼び出してもログアウトしません。
これらの設定を変更したいのであれば、こちらのように、FtpWebRequestクラスをお使いください。