GUIのデザイン
GroupBox、Label、TextBox、ButtonとFTPコントロールでGUIを作成します。特にこれといって設定するプロパティはありません。
接続用の3つのTextBoxコントロールのうち、パスワード用TextBoxコントロールは、[PasswordChar]プロパティに「*」を入力して伏字にしておきます。
また、データ処理用のTextBoxコントロールは、[MultiLine]プロパティを[True]に、[ScrollBars]プロパティを[Vertical]にしておきます。
FTPコントロールのデータ接続機能について
PowerTools Secure FTPには、ファイルやリストのftp転送だけでなく、ストリームを扱うための多くの機能が備わっています。FTPコントロールのこうした機能を利用することにより、サーバ上にあるファイルの読み込みと書き込みを直接行うことができます。編集したいファイルを一度ダウンロードして一時ファイルを作成し、編集後に再度サーバにアップロードする、という操作は必要ありません。これは、サーバ上のファイルへのデータ接続をストリームとして取得できるためです。
データ接続には、同期と非同期の2つのアクセスが可能ですが、同期オペレーションはイベントを実装する必要がないため、コードがとても単純になります。
また、ファイル転送と同様、ファイルの読み込みおよび書き込みのメソッドを実行した時点で、ftpサーバへの接続が実行されるので、ftpサーバのアドレス、ログインID、パスワードをプロパティにセットするだけで、接続処理を作成する必要がありません。
読み込みのためにデータ接続に同期アクセスする処理
まずはじめに、サーバにあるテキストファイルを開いて、その中身をTextBoxコントロールに表示する処理を作成してみましょう。今回は、この処理を「read_data」という独自のメソッドとして作成します。
メソッドの先頭で、ログイン用の3つのTextBoxコントロールの値を、それぞれ「Server」「Username」「Password」という3つのプロパティに格納する処理を行います。
次に、FTPコントロールの「Get」というメソッドを実行します。このメソッドはファイルの転送にも使用したメソッドですが、オーバーロードメソッドになっており、今回は「FTPデータ接続の読み込みに使用できるストリームを同期取得する」という機能を持ったメソッドを使用します。
このGetメソッドは引数を2つ持ち、第一のパラメータ「remoteFileName」は、データ接続を確立するサーバ上のファイルを指定します。第二のパラメ-タの「restartMarker」は、このファイルの読み込みを開始する位置を指定します。ここでは、サーバにあるテキストデータのファイル「mydialy.txt」を使用します。中身はほとんどなく、「*********** 日記 ************************」と書かれているだけのファイルです。また、読み込み開始位置は、ファイルの先頭を指定します。これで、常に「上書き」の処理ができあがります。
そして、メソッドの実行が成功すると、メソッドは「SegmentedStream」というオブジェクトを作成して返してきますので、同じデータ型の変数に格納しておきます。これで、ファイルへのアクセスがストリームという形で形成されます。
Private Sub read_data() Ftp1.Server = TextBox1.Text Ftp1.Username = TextBox2.Text Ftp1.Password = TextBox3.Text 'データの読み込み Dim sstream As Dart.PowerTCP.SecureFtp.SegmentedStream sstream = Ftp1.Get("mydialy.txt", 0)
private void read_data()
{
ftp1.Server = textBox1.Text;
ftp1.Username = textBox2.Text;
ftp1.Password = textBox3.Text;
//データの読み込み
Dart.PowerTCP.SecureFtp.SegmentedStream sstream;
sstream = ftp1.Get("mydialy.txt", 0);
ストリームが開いたら、「Read」というメソッドを実行します。このメソッドは、SegmentedStreamクラスのメンバで、オーバーロードになっておりデータの読み込みに際していろいろな機能を提供できるようになっています。今回は、最も単純な機能でストリームからデータを文字列に読み込むメソッドを使用します。引数はなく、メソッドを実行するだけでストリーム内のデータをすべて文字列で取得して返してきますので、変数に格納します。
そして、AbortTransferメソッドを使用して現在のファイル転送処理を中止し、ftpサーバとの接続を切ったら、変数の内容をTextBoxコントロールに表示して、メソッド「read_data」の処理はできあがりです。
Dim buffer As String = "" buffer = sstream.Read() Ftp1.AbortTransfer() sstream.Close() Me.TextBox4.Text = buffer End Sub
string buffer = "";
buffer = sstream.Read();
ftp1.AbortTransfer();
sstream.Close();
textBox4.Text = buffer;
}
この処理を、「接続」ボタンのClickイベントハンドラで呼び出します。
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click read_data() End Sub
private void button1_Click(object sender, EventArgs e) { read_data(); }
メソッド | 解説 |
---|---|
Get(String,String) | サーバから1つのファイルを同期取得します。 |
Get(String,Stream) | ファイルをFTPサーバから同期取得し、取得したデータをStreamオブジェクトに保存します。 |
Get(String,String,String,Boolean,Boolean) | サーバから複数のファイルを同期取得します。 |
Get(String,Int64) | FTPデータ接続の読み込みに使用できるストリームを同期取得します。 |
メソッド | 解説 |
---|---|
Read(Byte[],Int32,Int32) | ストリームからデータをバイト配列に読み込みます。 |
Read(Int32) | ストリームからデータを文字列に読み込みます。 |
Read() | ストリームからデータを文字列に読み込みます。 |
Read(String,Int32,Boolean) | 区切り文字に達するまでストリームからデータを読み込みます。 |
Read(String) | 区切り文字が見つかるまで、またはタイムアウト時間が経過するまで、文字列データを蓄積しながらストリームを読み込みます。 |
Read(Byte[],Int32,Int32,Boolean) | バイト配列が満たされるまでストリームからデータを読み込みます。 |
Read(Byte[],Boolean) | バイト配列が満たされるまでストリームからデータを読み込みます。 |
Read(Byte[],Byte[],Int32,Int32,Boolean) | Streamから読み込まれたデータ。 |
Read(Byte[],ArrayList,Int32,Int32,Boolean) | 指定された区切り文字のいずれかが見つかるまで、ストリームからデータを読み込みます。 |
Read(Byte[],Byte[],Boolean) | 区切り文字に達するまでストリームからデータを読み込みます。 |
Read(Byte[]) | Streamから少なくとも1バイトのデータを読み取り、提示されたバッファにコピーします。EnhancedStreamから継承されます。 |