C# FTPでダウンロード/アップロード

.NET FrameWork を使用するとFTPでのファイル ダウンロード/アップロード などは非常に手軽に行うことができます。

詳細なFTPコマンドを使用する場合は FtpWebRequest / FtpWebResponse などを使用しますが、手軽にダウンロードやアップロードをする場合は WebClient がお勧めです。

FTPでファイルをダウンロード

using (WebClient wc = new WebClient())
{
    try
    {
        // ログインユーザー名とパスワードを指定
        wc.Credentials = new NetworkCredential("username""password");
 
        // FTPサーバーからダウンロードする
        wc.DownloadFile("ftp://192.168.1.1/hoge/foo.txt"@"C:\foo.txt");
    }
    catch (WebException ex)
    {
        Console.WriteLine(ex);
    }
}

FTPでファイルをアップロード

using (WebClient wc = new WebClient())
{
    try
    {
        // ログインユーザー名とパスワードを指定
        wc.Credentials = new NetworkCredential("username""password");
 
        // FTPサーバーへアップロードする
        wc.UploadFile("ftp://192.168.1.1/hoge/foo.txt"@"C:\foo.txt");
    }
    catch (WebException ex)
    {
        Console.WriteLine(ex);
    }
}

リモート サーバーがエラーを返しました: (550) ファイルが使用できません

FFFTPなどのソフトでは接続できるのに、上記のコードで「リモート サーバーがエラーを返しました: (550) ファイルが使用できません (例: ファイルが見つからない、ファイルへのアクセスがない)」が発生する場合があります。

これはアドレスの後のスラッシュを2つにすることで接続できるようになる場合があります。
ex. ftp://192.168.1.1//hoge/foo.txt

この現象はURIが相対URIで処理されていることと、ログイン時の初期ディレクトリの設定により発生しています。詳しくは下記のページを参照ください。

FtpWebRequest クラス
使用環境: Visual Studio 2015 .NET Framework 4.5

C# メニューリスト