リストの取得
FTPサーバからファイルリストを同期通信で取得するには、 まずはじめにServer、Username、Passwordの各プロパティを設定します。 これにより、自動的なサーバーログインが可能になります。次にListメソッドを実行します。 このメソッドは、サーバから指定したディレクトリのファイルリストを、Listingコレクションオブジェクトとして返してきます。
ListingコレクションオブジェクトはListEntryオブジェクトの集合体で、ListEntryオブジェクトは各ファイルに関する情報(ファイル名、サイズ、更新日時、アクセス権など)を持ったオブジェクトです。従って、ファイルのリストを取得するには、以下の順番でFtpコントロールの各メソッドを実行します。
- Server、Username、Passwordの各プロパティを設定する
- ファイルを取得するディレクトリをカレントディレクトリに切り替えるコマンドを送信する
- Listメソッドを実行し、ファイルリストを取得する
- 取得したファイル情報を表示する
- 接続を閉じる
これらの処理をボタン「Button1」のClickイベントハンドラに作成します。
準備とサーバ接続処理
最初に、サーバ接続処理を作成します。
まず、Listメソッドの戻り値を受け取る変数を、モジュールレベルで宣言します。そして、Server、Username、Passwordの各プロパティをTextBoxから取得して設定する式を作成します。
また、リストを取得するディレクトリ名を受け取る式を作成します。TextBoxが空白であれば、FTPサーバのルートディレクトリをカレントディレクトリとして、ファイルリストを取得します。
Imports Dart.PowerTCP.SecureFtp Public Class Form1 Private files As Listing Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim dirname As String = "" ListBox1.Items.Clear() Ftp1.Server = TextBox1.Text Ftp1.Username = TextBox2.Text Ftp1.Password = TextBox3.Text dirname = TextBox4.Text
using Dart.PowerTCP.SecureFtp;
namespace myftp_cs
{
public partial class Form1 : Form
{
private Listing files;
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
string dirname = "";
listBox1.Items.Clear();
ftp1.Server = textBox1.Text;
ftp1.Username = textBox2.Text;
ftp1.Password = textBox3.Text;
dirname = textBox4.Text;
カレントディレクトリの変更とリストの取得
続いて、ファイルリストを取得するディレクトリを指定している場合は、ディレクトリ変更のコマンドをFTPサーバに送信する処理を行います。この処理は、FtpコントロールのInvokeメソッドを使用します。引数は2つで、最初の引数にコマンド名をFtpCommand列挙体のメンバで指定します。
ディレクトリの変更はメンバ「ChangeDir」を指定します。2番目の引数には、コマンドと一緒に送信するパラメータを設定します。ここでは、変更するディレクトリ名(フォルダ名)です。
メソッドが実行されると、カレントディレクトリが指定したディレクトリに変更されます。また、このメソッドが実行される直前に、自動的にサーバへのログイン処理が実行されます。TextBoxにディレクトリの指定がなければInvokeメソッドは実行されず、カレントディレクトリは変更されません。
そして、Listメソッドを実行します。取得したファイルリストをListingオブジェクトで返してきますので、変数に格納します。また、ListingオブジェクトのCountプロパティで取得したファイル数を把握できますので、これをステータスバーで表示します。
If dirname <> "" Then Ftp1.Invoke(FtpCommand.ChangeDir, dirname) End If files = Ftp1.List("*", True) ToolStripStatusLabel1.Text = "取得ファイル数:" & files.Count
if (dirname != "") { ftp1.Invoke(FtpCommand.ChangeDir, dirname); } files = ftp1.List("*", true); toolStripStatusLabel1.Text = "取得ファイル数:" + files.Count;
メンバ | 解説 |
---|---|
Account | 認証情報を提供するために「ACCT」を送信します |
ChangeDir | デフォルトの作業ディレクトリを変更するために「CWD <pathname>」を送信します |
ChangeDirUp | デフォルトの作業ディレクトリを1つ上のレベルに移動するために「CDUP」を送信します |
Delete | ファイルを削除するために「DELE <filename>」を送信します |
Help | ヘルプ情報を取得するために「HELP」を送信します |
MakeDir | ディレクトリを作成するために「MKD <pathname>」を送信します |
NoOp | 接続をテストするために「NOOP」を送信します |
Null | 修飾子のみが送信されるので、独自のコマンドを送信できます |
Password | 認証情報を提供するために「PASS」を送信します |
PrintDir | 現在の作業ディレクトリを確認するために「PWD」を送信します |
Quit | 接続を終了するために「QUIT」を送信します |
Reinitialize | セッションとログインを初期化するために「REIN」を送信します |
RemoveDir | ディレクトリを削除するために「RMD <pathname>」を送信します |
RenameFrom | 名前を変更するファイルを指定するために「RNFR <pathname>」を送信します |
RenameTo | ファイルの新しい名前を指定するために「RNTO <pathname>」を送信します |
SiteParameters | 特別なサービスにアクセスするために「SITE」を送信します |
Size | ファイルのサイズを取得するために「SIZE <filename>」を送信します |
Status | ステータス情報を取得するために「STAT」を送信します |
Structure | 特別なパターンのレコードとページ設定を操作するために「STRU <F|R|P>」を送信します |
StructureMount | ログアウトせずに別のファイルシステムのデータ構造をマウントするために「SMNT <structure>」を送信します |
System | システム情報を取得するために「SYST」を送信します |
Username | 認証情報を提供するために「USER」を送信します |