書き込みのためにデータ接続に同期アクセスする処理
今度は、書き込みのためにデータ接続に同期アクセスする処理を作成します。これは、「書き込み」ボタンのClickイベントハンドラに作成します。
まず、ログイン用の3つのTextBoxコントロールの値を、
それぞれ「Server」「Username」「Password」という3つのプロパティに格納する処理を再度行います。これは、ファイルの読み込みで一度ftpサーバとの接続を切っているので、再接続するために使用します。
そして、読み込んだデータが表示されているTextBoxコントロールのデータを変数に格納し、追加の文字列が書き込まれているTextBoxコントロールの内容を加えます。
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click Ftp1.Server = TextBox1.Text Ftp1.Username = TextBox2.Text Ftp1.Password = TextBox3.Text 'データの書き込み Dim wstream As Dart.PowerTCP.SecureFtp.SegmentedStream Dim msg As String msg = Me.TextBox4.Text & System.Environment.NewLine msg += Me.TextBox5.Text
private void button2_Click(object sender, EventArgs e) { ftp1.Server = textBox1.Text; ftp1.Username = textBox2.Text; ftp1.Password = textBox3.Text; //データの書き込み Dart.PowerTCP.SecureFtp.SegmentedStream wstream; string msg; msg = textBox4.Text + System.Environment.NewLine; msg += textBox5.Text;
次に、「Put」というメソッドでファイルへのストリームを作成します。このメソッドも、ファイル転送に使用したメソッドですが、引数を変えるとファイルへのストリームを作成するメソッドになります。
引数はGetメソッドと同様2つで、第一のパラメータのremoteFileName は、データ接続を確立するサーバ上のファイルを指定し、第二パラメ-タの restartMarker は、このファイルの書き込みを開始する位置を指定します。ここでは、ファイル「mydialy.txt」を指定し、書き込み開始位置はファイルの先頭を指定します。メソッドの実行が成功すると、メソッドはSegmentedStreamオブジェクトを作成して返してきますので、同じデータ型の変数に格納しておきます。これで、Getメソッドと同様ファイルへのアクセスがストリームという形で形成されますが、この場合は書き込みという形でストリームが形成されます。
ストリームが開いたら、「Write」メソッドを実行します。このメソッドも、SegmentedStreamクラスのメンバで、オーバーロードになっておりデータの書き込みに際していろいろな機能を提供できるようになっています。今回は、最も単純な機能でストリームに文字列を書き込むメソッドを使用します。引数はなく、メソッドを実行するだけです。
そして、データをファイルに書き出したら、一度ftpサーバとの接続を切り、再度ファイルを読み込むメソッド「read_data」を実行してファイル更新の内容をTextBoxコントロールに表示してできあがりです。
wstream = Ftp1.Put("mydialy.txt", 0) wstream.Write(msg) wstream.Close() Me.TextBox5.Text = "" read_data() End Sub
wstream = ftp1.Put("mydialy.txt", 0); wstream.Write(msg); wstream.Close(); textBox5.Text = ""; read_data(); }
メソッド | 解説 |
---|---|
Put(String,String) | 1つのファイルをサーバに同期保存します。 |
Put(Stream,String) | ストリームをファイルとしてサーバ上に同期保存します。 |
Put(String,String,String,Boolean,Boolean) | サーバに複数のファイルを同期送信します。 |
Put(String,Int64) | データ接続への書き込みに使用できるストリームを同期取得します。 |
メソッド | 解説 |
---|---|
Write(Byte[],Byte[],Byte[],Int32,Int32) | ストリームにデータを書き込むと同時に、バイトごとの検索/置換を実行します。 |
Write(Byte[],Byte[],Int32,Int32) | 区切り文字に達するまでストリームにデータを書き込みます。 |
Write(Byte[],Int32,Int32) | データをストリームに書き込みます。 |
Write(String) | ストリームに文字列を書き込みます。 |
Write(Byte[]) | Streamにバイトのシーケンスを書き込み、処理が完了した時点で終了します。EnhancedStreamから継承されます。 |
まとめ
メソッドの実行だけで、ftpサーバにあるファイルを直接読み書きできるのは、開発する側にとっては負担が少なく開発コストを抑えることができるので、とても魅力的な機能でしょう。
今回は、簡単なテキストファイルの読み書きを例にとりましたが、業務系アプリケーションの開発ではもっといろいろなケースのデータ処理に利用できると思います。