SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

ComponentZine(Secure FTP)

同期通信でファイルをサーバに転送する.NETアプリケーションを作る

FTPファイル転送機能を持ったアプリケーションの作成 2

  • このエントリーをはてなブックマークに追加

ファイル転送処理

 「アップロード」ボタンが押された時のファイル転送処理では、まずPutメソッドの戻り値を格納する変数を「FtpFile」型で宣言します。

 そして、3つのTextBoxから取得したFTPサーバのアドレス、ログインID、パスワードをそれぞれFtpコントロールのServer、Username、Passwordの各プロパティに格納します。

Visual Basic
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

    '同期でのファイル転送
    Dim upfile As FtpFile

    Ftp1.Server = TextBox2.Text
    Ftp1.Username = TextBox3.Text
    Ftp1.Password = TextBox4.Text
C#
private void button2_Click(object sender, EventArgs e)
{
    //同期でのファイル転送
    FtpFile upfile;

    ftp1.Server = textBox2.Text;
    ftp1.Username = textBox3.Text;
    ftp1.Password = textBox4.Text;

 そして、Putメソッドを実行します。このメソッドはオーバーロードメソッドで、単一のファイルを転送する場合は、2つの引数を持ったメソッドを使用します。1つ目の引数には転送するファイル名を、パス名付きで記述します。2つ目の引数には、転送するFTPサーバのディレクトリ名とファイル名を指定します。

 ファイルの転送は、この2番目の引数で指定したファイル名でFTPサーバに作成されるので、ここにはパス名を除いたファイル名を指定します。パス名を付けて指定してしまうと、そのパス名もファイル名の一部になってFTPサーバにコピーされます。例えば、「C:¥data¥mydata.txt」というパス名付きのファイル名を2番目の引数に設定してしまうと、このパス名もファイル名の一部として使われることになってしまいます。

パス名もファイル名の一部として使われてしまう
パス名もファイル名の一部として使われてしまう

 Putメソッドによるファイル転送は、基本的には「コピー」になり、メソッドの2番目の引数でコピー先のファイル名を設定するようになっています。ですから、逆に言うとサーバに転送する際に違うファイル名で転送することも可能になります。

 このプログラムでは、転送元と転送先が同じファイル名になるようにするため、1番目の引数にはOpenFileDialogコントロールのFileNameプロパティの値(パス名付きのファイル名)を使い、2番目の引数にはパス名を除いたファイル名が拡張子付きで格納されている、SafeFileNameプロパティの値を使用しています。

Putメソッドの書式-単一ファイル用
Overloads Public Function Put(ByVal localFileName As String, ByVal remoteFileName As String) As FtpFile
Visual Basic
upfile = Ftp1.Put(fullpass, "html/" + fname)
C#
upfile = ftp1.Put(fullpass, "html/" + fname);

転送完了のチェック

 最後に、Putメソッドの戻り値を使って、無事にファイル転送が行われたかどうかをチェックします。

 メソッドの戻り値はFtpFileオブジェクトに格納され、次の情報がこのオブジェクトのそれぞれのプロパティに格納されます。

プロパティ名 格納されるデータ
Count 転送されたバイト数
Exception ファイル転送の最中に発生した例外
Length ファイルの長さ
LocalFileName 転送されたローカルファイルのパス名
Position ストリームまたはファイル内での位置
RemoteFileName 転送されたリモートファイルのパス名
Status RemoteFileNameによって参照されるファイル(またはディレクトリ)のステータス

 今回は、この中からLengthプロパティを使用し、ファイル転送がちゃんと行われたかどうかをチェックします。ファイルの長さが0以上であれば、ファイルの転送が正しく行われたと判断します(より厳密にチェックしたければ転送元のファイルサイズとLengthプロパティの値が等しいことをチェックします)。

 そして、Labelコントロールに転送完了のメッセージを表示して終了します。

Visual Basic
    '転送完了のチェック

    If upfile.Length >= 0 Then
        Label4.Text = "転送が完了しました。"
    End If

    Ftp1.Close()

End Sub
C#
    //転送完了のチェック
    if (upfile.Length >= 0)
    {
        label4.Text = "転送が完了しました。";
    }

    ftp1.Close();
}

まとめ

 Ftpコントロールを使えば、サーバへのアップロードもとても簡単に行えます。また、転送したファイルの情報をメソッドが返してきますので、いちいちリストを取得して転送元と照合するような処理は必要ありません。

 アプリケーションの一部にFTPサーバへの転送機能を組み込みたい、という時などにはアプリケーションの開発工数を抑えることができますので、大いに役に立つコントロールだと思います。

製品情報

この記事は参考になりましたか?

  • このエントリーをはてなブックマークに追加
ComponentZine(Secure FTP)連載記事一覧

もっと読む

この記事の著者

瀬戸 遥(セト ハルカ)

8ビットコンピュータの時代からBASICを使い、C言語を独習で学びWindows 3.1のフリーソフトを作成、NiftyServeのフォーラムなどで配布。Excel VBAとVisual Basic関連の解説書を中心に現在まで40冊以上の書籍を出版。近著に、「ExcelユーザーのためのAccess再...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/4057 2009/06/22 16:19

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング