SHOEISHA iD

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

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

ComponentZine(Secure FTP)

サーバのファイルを直接読み書きする.NETアプリケーションを作る

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

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

GUIのデザイン

 GroupBox、Label、TextBox、ButtonとFTPコントロールでGUIを作成します。特にこれといって設定するプロパティはありません。

 接続用の3つのTextBoxコントロールのうち、パスワード用TextBoxコントロールは、[PasswordChar]プロパティに「*」を入力して伏字にしておきます。

 また、データ処理用のTextBoxコントロールは、[MultiLine]プロパティを[True]に、[ScrollBars]プロパティを[Vertical]にしておきます。

GUI画面
GUI画面

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」というオブジェクトを作成して返してきますので、同じデータ型の変数に格納しておきます。これで、ファイルへのアクセスがストリームという形で形成されます。

Visual Basic
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)
C#
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」の処理はできあがりです。

Visual Basic
    Dim buffer As String = ""
    buffer = sstream.Read()

    Ftp1.AbortTransfer()
    sstream.Close()
    
    Me.TextBox4.Text = buffer
End Sub
C#
    string buffer = "";
    buffer = sstream.Read();

    ftp1.AbortTransfer();
    sstream.Close();
    
    textBox4.Text = buffer;
}

 この処理を、「接続」ボタンのClickイベントハンドラで呼び出します。

Visual Basic
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    read_data()
End Sub
C#
private void button1_Click(object sender, EventArgs e)
{
    read_data();
}
Getメソッドのオーバーロード一覧
メソッド 解説
Get(String,String) サーバから1つのファイルを同期取得します。
Get(String,Stream) ファイルをFTPサーバから同期取得し、取得したデータをStreamオブジェクトに保存します。
Get(String,String,String,Boolean,Boolean) サーバから複数のファイルを同期取得します。
Get(String,Int64) FTPデータ接続の読み込みに使用できるストリームを同期取得します。
Readメソッドのオーバーロード一覧
メソッド 解説
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から継承されます。

次のページ
書き込みのためにデータ接続に同期アクセスする処理

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

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

もっと読む

この記事の著者

瀬戸 遥(セト ハルカ)

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

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

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

この記事をシェア

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

おすすめ

アクセスランキング

アクセスランキング

イベント

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

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

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

メールバックナンバー

アクセスランキング

アクセスランキング