SHOEISHA iD

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

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

ComponentZine(Secure FTP)

FTPファイル転送機能を持った.NETアプリケーションを作る

PowerTools Secure FTP 2.0JのFTPコントロールを使ったFTPアプリケーションの作成

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

リストの作成と表示

リスト作成処理

 取得したリストは、ListingオブジェクトのFormatプロパティを使って、リストの形式(UNIXなのかDosなのか、それとも不明の形式なのか)をチェックします。そして、不明な形式以外であれば、For...Eachステートメントを使ってファイルを1つずつ取り出し、ListBoxに組み込みます。

 その際、ListEntryオブジェクトのTypeプロパティを参照し、ファイルのタイプがディレクトリかどうかをチェックします。これは、「EntryType列挙体」のメンバ「Directory」と比較します。ファイルがディレクトリであれば、リストの先頭に<Dir>という文字を付け、そうでなければそのままNameプロパティの値をリストに組み込みます。

 すべてのファイル名を取り出したら、FtpコントロールのCloseメソッドを実行し、FTPサーバとの接続を閉じます。

Visual Basic
    If files.Format <> ListingFormat.Unknown Then

        ' ListEntry オブジェクトを繰り返します。
        Dim le As ListEntry

        For Each le In files
            ' ファイルのパスと名前を表示します。
            If le.Type = EntryType.Directory Then
                ListBox1.Items.Add("<Dir>" & le.Name)
            Else
                ListBox1.Items.Add("      " & le.Name)
            End If
        Next
    Else
        ' 不明なフォーマット
        MessageBox.Show("不明なフォーマットです。")
    End If
    Ftp1.Close()
End Sub
C#
       if (files.Format != ListingFormat.Unknown)
       {
           // ListEntryオブジェクトを取り出す
           foreach (ListEntry le in files)
           {
           // ファイル名を表示
           if (le.Type == EntryType.Directory)
           {
               listBox1.Items.Add("<Dir>" + le.Name);
           }
           else
           {
               listBox1.Items.Add("      " + le.Name);
           }
        }
    }
    else
    {
        // 不明なフォーマットの場合
        MessageBox.Show("不明なフォーマットです。");
    }

    ftp1.Close();
}
EntryType列挙体のメンバ
メンバ 解説
File ListEntry.Nameにファイル名が格納されていることを示します
Directory ListEntry.Nameにディレクトリ名が格納されていることを示します
Link ListEntryにリンクが格納されていることを示します
Unknown ListEntryを解析できなかったことを示します

リスト選択時の情報表示処理

 最後にリストのファイル名をクリックした際、ファイルサイズ、更新日時、アクセス権の情報をラベルに表示するようにします。

 まず、選択されたリスト項目の位置を取得し、その値を使ってListingオブジェクトにアクセスします。Listingオブジェクト内のListEntryオブジェクトの位置とListBoxのリストの位置は同じなので、選択されたリスト位置のListEntryオブジェクトの各プロパティを参照して情報を取得します。

プロパティ 内容
Name ファイル名
Size ファイルサイズ
TimeStamp 更新日時
Permissions アクセス権
Visual Basic
Private Sub ListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.SelectedIndexChanged
    Dim pos As Integer

    pos = ListBox1.SelectedIndex

    Label5.Text = files(pos).Name & " : " & _
                  files(pos).Size & "バイト" & " : " & _
                  files(pos).TimeStamp & " : " & _
                  files(pos).Permissions
End Sub    
C#
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
    int pos;

    pos = listBox1.SelectedIndex;

    label5.Text = files[pos].Name + " : " +
                  files[pos].Size + "バイト" + " : " +
                  files[pos].TimeStamp + " : " +
                  files[pos].Permissions;
}

まとめ

 とても簡単に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/3974 2009/05/28 14:30

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング