ファイル転送処理
「アップロード」ボタンが押された時のファイル転送処理では、まずPutメソッドの戻り値を格納する変数を「FtpFile」型で宣言します。
そして、3つのTextBoxから取得したFTPサーバのアドレス、ログインID、パスワードをそれぞれFtpコントロールのServer、Username、Passwordの各プロパティに格納します。
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click '同期でのファイル転送 Dim upfile As FtpFile Ftp1.Server = TextBox2.Text Ftp1.Username = TextBox3.Text Ftp1.Password = TextBox4.Text
private void button2_Click(object sender, EventArgs e) { //同期でのファイル転送 FtpFile upfile; ftp1.Server = textBox2.Text; ftp1.Username = textBox3.Text; ftp1.Password = textBox4.Text;
そして、Putメソッドを実行します。このメソッドはオーバーロードメソッドで、単一のファイルを転送する場合は、2つの引数を持ったメソッドを使用します。1つ目の引数には転送するファイル名を、パス名付きで記述します。2つ目の引数には、転送するFTPサーバのディレクトリ名とファイル名を指定します。
ファイルの転送は、この2番目の引数で指定したファイル名でFTPサーバに作成されるので、ここにはパス名を除いたファイル名を指定します。パス名を付けて指定してしまうと、そのパス名もファイル名の一部になってFTPサーバにコピーされます。例えば、「C:¥data¥mydata.txt」というパス名付きのファイル名を2番目の引数に設定してしまうと、このパス名もファイル名の一部として使われることになってしまいます。
Putメソッドによるファイル転送は、基本的には「コピー」になり、メソッドの2番目の引数でコピー先のファイル名を設定するようになっています。ですから、逆に言うとサーバに転送する際に違うファイル名で転送することも可能になります。
このプログラムでは、転送元と転送先が同じファイル名になるようにするため、1番目の引数にはOpenFileDialogコントロールのFileNameプロパティの値(パス名付きのファイル名)を使い、2番目の引数にはパス名を除いたファイル名が拡張子付きで格納されている、SafeFileNameプロパティの値を使用しています。
Overloads Public Function Put(ByVal localFileName As String, ByVal remoteFileName As String) As FtpFile
upfile = Ftp1.Put(fullpass, "html/" + fname)
upfile = ftp1.Put(fullpass, "html/" + fname);
転送完了のチェック
最後に、Putメソッドの戻り値を使って、無事にファイル転送が行われたかどうかをチェックします。
メソッドの戻り値はFtpFileオブジェクトに格納され、次の情報がこのオブジェクトのそれぞれのプロパティに格納されます。
プロパティ名 | 格納されるデータ |
---|---|
Count | 転送されたバイト数 |
Exception | ファイル転送の最中に発生した例外 |
Length | ファイルの長さ |
LocalFileName | 転送されたローカルファイルのパス名 |
Position | ストリームまたはファイル内での位置 |
RemoteFileName | 転送されたリモートファイルのパス名 |
Status | RemoteFileNameによって参照されるファイル(またはディレクトリ)のステータス |
今回は、この中からLengthプロパティを使用し、ファイル転送がちゃんと行われたかどうかをチェックします。ファイルの長さが0以上であれば、ファイルの転送が正しく行われたと判断します(より厳密にチェックしたければ転送元のファイルサイズとLengthプロパティの値が等しいことをチェックします)。
そして、Labelコントロールに転送完了のメッセージを表示して終了します。
'転送完了のチェック If upfile.Length >= 0 Then Label4.Text = "転送が完了しました。" End If Ftp1.Close() End Sub
//転送完了のチェック
if (upfile.Length >= 0)
{
label4.Text = "転送が完了しました。";
}
ftp1.Close();
}
まとめ
Ftpコントロールを使えば、サーバへのアップロードもとても簡単に行えます。また、転送したファイルの情報をメソッドが返してきますので、いちいちリストを取得して転送元と照合するような処理は必要ありません。
アプリケーションの一部にFTPサーバへの転送機能を組み込みたい、という時などにはアプリケーションの開発工数を抑えることができますので、大いに役に立つコントロールだと思います。