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

フォルダの情報を先読みする

 待機中にサーバーの情報を読み出す方法は幾つかありますが、次のサンプルは、単一の接続で空き時間にディレクトリの内容を先読みする例です。 TKFP.DLLには標準で、サーバーから取得した情報を一定時間保存しておく機能があり、フォルダの情報などはプロパティやメソッドの実行時に、 実際に通信処理を行うか、キャッシュの情報を利用するか判別されます。 この機能を利用して、本来の処理とは無関係の場所ですべてのディレクトリ情報を空読みするようにし、情報が必要なときには通信を行わ無いようにしています。
 サンプルでは、FTPサーバーへの接続完了後に、フォルダを空読みするスレッドを立ち上げています。 先読み実行中でもTKFP.Net.FtpClientの通信はスレッドセーフなので、特別な排他処理を追加する必要がありません。
C#.NET
private TKFP.Net.FtpClient OpenFtp(string server , string userid , string pass , string startpass)
{
    //ログオン用のクラスを作成
    TKFP.Net.IFtpLogon logon = new TKFP.Net.BasicFtpLogon(userid, pass);

    //FTPクライアントクラスの作成
    TKFP.Net.FtpClient ftp = new TKFP.Net.FtpClient(logon, server, 21);

    //接続開始
    if (ftp.Connect())
    {
        //先読みクラスのインスタンスを作成し別スレッドで実行します
        Prefetch pr = new Prefetch();
        pr.startdirectory = new TKFP.IO.DirectoryInfo(ftp, startpass);
        System.Threading.Thread th = new System.Threading.Thread(new System.Threading.ThreadStart(pr.Start));
        th.IsBackground = true;
        th.Start();

        System.Windows.Forms.MessageBox.Show("接続成功");
    }
    else
    {
        System.Windows.Forms.MessageBox.Show("接続失敗");
    }

    return ftp;
}

//情報の先読み用クラス
private class Prefetch
{
    public TKFP.IO.DirectoryInfo startdirectory;

    public void Start()
    {
        System.Collections.Queue Directories = new System.Collections.Queue();
        //スタートディレクトリをキューに登録します
        Directories.Enqueue(startdirectory);

        while (Directories.Count != 0)
        {
            TKFP.IO.DirectoryInfo Directory = (TKFP.IO.DirectoryInfo)Directories.Dequeue();
            foreach (TKFP.IO.DirectoryInfo SubDirectory in Directory.GetDirectories())
            {
                //サブディレクトをキューに追加します
                Directories.Enqueue(SubDirectory);
            }
        }
    }

}
VB.NET
Private Function OpenFtp(ByVal server As String, ByVal userid As String, ByVal pass As String, ByVal startpass As String) As TKFP.Net.FtpClient
    'ログオン用のクラスを作成
    Dim logon As New TKFP.Net.BasicFtpLogon(userid, pass)

    'FTPクライアントクラスの作成
    Dim ftp As New TKFP.Net.FtpClient(logon, server, 21)

    '接続開始
    If ftp.Connect() Then
        '先読みクラスのインスタンスを作成し別スレッドで実行します
        Dim pr As New Prefetch()
        pr.startdirectory = New TKFP.IO.DirectoryInfo(ftp, startpass)
        Dim th As New System.Threading.Thread(New System.Threading.ThreadStart(AddressOf pr.Start))
        th.IsBackground = True
        th.Start()

        System.Windows.Forms.MessageBox.Show("接続成功")
    Else
        System.Windows.Forms.MessageBox.Show("接続失敗")
    End If

    Return ftp
End Function

'情報の先読み用クラス
Private Class Prefetch
    Public startdirectory As TKFP.IO.DirectoryInfo

    Public Sub Start()
        Dim Directories As New System.Collections.Queue()
        'スタートディレクトリをキューに登録します
        Directories.Enqueue(startdirectory)

        While Directories.Count <> 0
            Dim Directory As TKFP.IO.DirectoryInfo = CType(Directories.Dequeue(), TKFP.IO.DirectoryInfo)
            Dim SubDirectory As TKFP.IO.DirectoryInfo
            For Each SubDirectory In Directory.GetDirectories()
                'サブディレクトをキューに追加します
                Directories.Enqueue(SubDirectory)
            Next SubDirectory
        End While
    End Sub
End Class
VB.NETのコードはC#.NETを元に「C#.NET to VB.NET Translator」によって作成したものです

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