The project of U-WA-
http://uwa.potetihouse.com/
戻る
TKFP.DLL   プログラミングTips

転送中の経過を表示する

 TKFP.IO.FileInfoクラスのファイル転送はすべて同期処理で行っているため、 転送中の転送量についてはTKFP.IO.FileInfoクラスでの取得は行えません。 これを解決するには、非同期の別スレッドを用意しTKFP.Net.FtpClientクラスの転送量を監視します。
 次のプログラムではファイルの転送前に転送量の監視スレッドを開始し、ファイル転送中の転送量をコンソールに表示しています。 監視スレッドの実行と停止には特に制御を行っていないので、実際のプログラムへ転用するには監視スレッドの生成と破棄を厳密におなう必要があります。
また、TKFP.Net.FtpClientクラスのSendDataLengthプロパティとReceiveDataLengthプロパティには ファイル転送の送通信量が記録されるので、ファイル個別での転送量を表示したい場合は、 プロパティの値をリセットするか、開始時のサイズを記録する必要があります。
C#.NET
//転送に使用するFTPクライアントクラス
private TKFP.Net.FtpClient ftpClient;

//ファイルの送信を行ないます
private void SendFile(string serverPath, string localPath)
{
    //サーバーに作成するファイル情報のインスタンスを作成します
    TKFP.IO.FileInfo file = new TKFP.IO.FileInfo(ftpClient, serverPath);

    //上書き保護
    if (file.Exists)
    {
        System.Windows.Forms.MessageBox.Show("ファイルは既に存在します。");
        return;
    }

    //通信量を表示するために新しいスレッド実行します
    new System.Threading.Thread(new System.Threading.ThreadStart(Monitor)).Start();
    
    //ファイルをサーバーへ送信します。
    file.ReadFrom(localPath);

    System.Windows.Forms.MessageBox.Show("ファイルを送信しました。");
}

//データの転送量を表示するメソッド
//別スレッドで実行します
private void Monitor()
{
    //モニタ終了のシグナルをFTPの切断にしています
    while (ftpClient.Connected)
    {
        //現在の送信量と受信量をコンソールに表示します
        System.Console.WriteLine("Send : {0}byte   Receive : {1}byte", ftpClient.SendDataLength, ftpClient.ReceiveDataLength);
        //CPUのリソースを節約するためにウエイトを入れています
        System.Threading.Thread.Sleep(500);
    }
}
VB.NET
'転送に使用するFTPクライアントクラス
Private ftpClient As TKFP.Net.FtpClient

'ファイルの送信を行ないます
Private Sub SendFile(ByVal serverPath As String, ByVal localPath As String)
    'サーバーに作成するファイル情報のインスタンスを作成します
    Dim file As New TKFP.IO.FileInfo(ftpClient, serverPath)

    '上書き保護
    If file.Exists Then
        System.Windows.Forms.MessageBox.Show("ファイルは既に存在します。")
        Return
    End If

    '通信量を表示するために新しいスレッド実行します
    Dim thread As System.Threading.Thread
    thread = New System.Threading.Thread(New System.Threading.ThreadStart(AddressOf Monitor))
    thread.Start()

    'ファイルをサーバーへ送信します。
    file.ReadFrom(localPath)

    System.Windows.Forms.MessageBox.Show("ファイルを送信しました。")
End Sub

'データの転送量を表示するメソッド
'別スレッドで実行します
Private Sub Monitor()
    'モニタ終了のシグナルをFTPの切断にしています
    While ftpClient.Connected
        '現在の送信量と受信量をコンソールに表示します
        System.Console.WriteLine("Send : {0}byte   Receive : {1}byte", ftpClient.SendDataLength, ftpClient.ReceiveDataLength)
        'CPUのリソースを節約するためにウエイトを入れています
        System.Threading.Thread.Sleep(500)
    End While
End Sub
VB.NETのコードはC#.NETを元に「C#.NET to VB.NET Translator」によって作成したものです

トップページへ移動
The project of U-WA-
http://uwa.potetihouse.com/