今回はC#でのFTPファイル転送についてまとめていきたいと思います!!
ちょっと興味があり、以前調べたのですが使うことがなく。。。
忘れない内に備忘録として残しておきたいと思います!!
■FTPとは?
超基礎的ですが、一応。
FTPとは「File Transfer Protocol」の略称であり、ファイルを転送・通信するための規格です。
クライアントとサーバ間で、ファイルのアップロード・ダウンロードを行うときに使われるプロトコルのことです。
■FTPサーバーへのファイルアップロード
FTPクライアントからのファイルアップロードを行う場合(ファイルダウンロードもですが)、
System.Netを利用するため、前もって、
using System.Net
を定義しておきます。
メインのファイルアップロードですが、コードはこちらになります。
try { WebClient wc = new WebClient(); wc.Credentials = new NetworkCredential("ユーザ名", "password"); foreach (string FilePath in FileList) { string FileName = System.IO.Path.GetFileName(FilePath); // ファイル名取得. wc.UploadFile(string.Format("{0}/{1}", FTPpath, FileName), FilePath); // ファイルアップロード. } } catch (Exception e) { Ret = -1; Console.WriteLine(e.ToString()); }
WebClient wc = new WebClient(); wc.Credentials = new NetworkCredential("ユーザ名", "password");
にてFTPサーバとの接続を実施します。
※ユーザ名、passwordにはFTPサーバ側のユーザ名とパスワードを入力してください。
そして、送信するのはWebClientのUploadFileを用います。
UploadFileの引数は、
UploadFile("送信先パス","送信元ファイルパス")
となります。
今回は、string.Formatを用いて、ファイル名とファイルパスを分離して渡しております。
ここで、送信先パスが存在しない場合にはエラーになりますので注意下さい。
FTPサーバー側でフォルダが存在するかをチェックする処理はこちらになります。
アップロード前にパスが存在するか確認するのがよいですね。
WebRequest request = WebRequest.Create(FTPpath); request.Credentials = new NetworkCredential("ユーザ名", "password"); request.Method = WebRequestMethods.Ftp.ListDirectory; // リクエスト生成(存在するディレクトリチェック) using (WebResponse res = request.GetResponse()) // ディレクトリ名取得. { using (StreamReader sr = new StreamReader(res.GetResponseStream())) { Ret = sr.ReadToEnd(); } // ディレクリ名の文字列を生成. } wc.Dispose();
こちらでFTPpathで指定したファイルパス以降に存在するフォルダリストが取得できます。
request.Method = WebRequestMethods.Ftp.ListDirectory; // リクエスト生成(存在するディレクトリチェック)
■FTPサーバーからのファイルダウンロード
次はサーバーからのファイルダウンロードです。
。。。といってもFTPサーバーへのアップロードとほとんど同じです。
try { WebClient wc = new WebClient(); wc.Credentials = new NetworkCredential("ユーザ名", "password"); foreach (string FilePath in FileList) { string FileName = System.IO.Path.GetFileName(FilePath); // ファイル名取得. wc.DownloadFile(string.Format("{0}/{1}", FTPpath, FileName), FilePath); // ファイルダウンロード. } wc.Dispose(); }
アップロードと異なる点はこちらになります。
wc.DownloadFile(string.Format("{0}/{1}", FTPpath, FileName), FilePath); // ファイルダウンロード.
DownloadFileというAPIを用いればFTPからのダウンロードが行えます。
DownloadFileは、
DownloadFile("ダウンロード対象パス", "ダウンロード先パス");
となります。
こちらについてもファイルが存在しない場合にはエラーになってしまいます。
ファイルの存在有無は先ほどのWebRequestMethods.Ftp.ListDirectoryで確認することが出来るので、こちらも前もって確認しておくとよいですね。