fc2ブログ

トップ  >  サンプルソース  >  FTPファイル更新チェック(C#/VB.NET)

FTPファイル更新チェック(C#/VB.NET)

2010年08月10日

FTPファイルの更新有無を確認(チェック)するサンプル(ソース/コード)です。FTPファイルの更新をいち早く知りたい時に役立つと思います。

処理の流れは次の通りです。2から4はタイマーで処理しています。
1.FTPファイル(旧)読み込み
2.FTPファイル(新)読み込み
3.新旧サイズチェック
4.サイズが同じ時は全バイト比較

FTP関連情報:FTPの漢字ファイル名(VB.NET)

' -----------------------------------------------------------
' FTPファイル更新チェックのサンプル(VB.NET/VS2005)
Private strUrl As String = "ftp://xxx.xxx.com/xxx/xxx.txt"
Private oldFtp As Byte() = New Byte(-1) {}
Private Sub Button1_Click( _
    ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Button1.Click

    ' FTPファイル(旧)読み込み
    oldFtp = GetFtpFile(strUrl)

    ' FTPファイル更新チェック開始(60秒間隔)
    Timer1.Interval = 60000
    Timer1.Enabled = True
End Sub

Private Sub Timer1_Tick( _
    ByVal sender As System.Object, _
    ByVal e As System.EventArgs) Handles Timer1.Tick
    ' FTPファイル(新)読み込み
    Dim newFtp As Byte() = GetFtpFile(strUrl)
    If oldFtp.Length <> newFtp.Length Then
        ' バイト数が違う
        Timer1.Enabled = False
        MessageBox.Show("FTP更新有り")
        Return
    Else
        For i As Integer = 0 To oldFtp.Length - 1
            If oldFtp(i) <> newFtp(i) Then
                ' データが違う
                Timer1.Enabled = False
                MessageBox.Show("FTP更新有り")
                Return
            End If
        Next
    End If
End Sub

' FTPファイル取得(ダウンロード)
Private Function GetFtpFile(ByVal url As String) As Byte()
    Dim st As System.IO.Stream = Nothing
    Dim rs As System.Net.WebResponse = Nothing
    Try
        Dim url_uri As New Uri(url)
        Dim dat As Byte() = New Byte(-1) {}

        Dim rq As System.Net.FtpWebRequest = _
            CType(System.Net.FtpWebRequest.Create(url), _
            System.Net.FtpWebRequest)
        ' ユーザIDとパスワードの設定
        rq.Credentials = _
            New System.Net.NetworkCredential( _
            "hf524137 ", "vh2dg7G6")
        ' ファイルのダウンロード指定
        rq.Method = _
            System.Net.WebRequestMethods.Ftp.DownloadFile
        ' KeepAlive設定
        rq.KeepAlive = False
        ' バイナリ設定
        rq.UseBinary = True
        ' パッシブ設定
        rq.UsePassive = False
        ' FTP接続
        rs = rq.GetResponse()
        ' FTPダウンロード
        st = rs.GetResponseStream()
        Dim bytes As Byte()
        Dim ttlSiz As Integer = 0
        Dim oneSiz As Integer
        Do
            ReDim bytes((1024 * 100) - 1)
            oneSiz = st.Read(bytes, 0, bytes.Length)
            If oneSiz > 0 Then
                ReDim Preserve dat(ttlSiz + oneSiz - 1)
                If oneSiz <> bytes.Length Then
                    ReDim Preserve bytes(oneSiz - 1)
                End If
                bytes.CopyTo(dat, ttlSiz)
                ttlSiz = ttlSiz + oneSiz
            End If
        Loop While (oneSiz > 0)

        Return dat
    Catch ex As Exception
        Throw ex
    Finally
        If st Is Nothing = False Then
            st.Close()
            st = Nothing
        End If
        If rs Is Nothing = False Then
            rs.Close()
            rs = Nothing
        End If
    End Try
End Function
' -----------------------------------------------------------

// ----------------------------------------------------------
// FTPファイル更新チェックのサンプル(C#.NET/VS2005)
private String strUrl = "ftp://xxx.xxx.com/xxx/xxx.txt";
private Byte[] oldFtp = new Byte[0] { };
private void button1_Click(object sender, EventArgs e)
{
    // FTPファイル(旧)読み込み
    oldFtp = GetFtpFile(strUrl);

    // FTPファイル更新チェック開始(60秒間隔)
    timer1.Interval = 60000;
    timer1.Enabled = true;
}

private void timer1_Tick(object sender, EventArgs e)
{
    // FTPファイル(新)読み込み
    Byte[] newFtp = GetFtpFile(strUrl);
    if (oldFtp.Length != newFtp.Length)
    {
        // バイト数が違う
        timer1.Enabled = false;
        MessageBox.Show("FTP更新有り");
        return;
    }
    else
    {
        for (int i = 0; i <= oldFtp.Length - 1; i++)
        {
            if (oldFtp[i] != newFtp[i])
            {
                // データが違う
                timer1.Enabled = false;
                MessageBox.Show("FTP更新有り");
                return;
            }
        }
    }
}
// FTPファイル取得(ダウンロード)
private Byte[] GetFtpFile(String url)
{
    System.IO.Stream st = null;
    System.Net.WebResponse rs = null;
    try
    {
        Uri url_uri = new Uri(url);
        Byte[] dat = new Byte[0] { };

        System.Net.FtpWebRequest rq =
            ((System.Net.FtpWebRequest)
            System.Net.WebRequest.Create(url));
        // ユーザIDとパスワードの設定
        rq.Credentials =
            new System.Net.NetworkCredential(
            "hf524137 ", "vh2dg7G6");
        // ファイルのダウンロード指定
        rq.Method =
            System.Net.WebRequestMethods.Ftp.DownloadFile;
        // KeepAlive設定
        rq.KeepAlive = false;
        // バイナリ設定
        rq.UseBinary = true;
        // パッシブ設定
        rq.UsePassive = false;
        // FTP接続
        rs = rq.GetResponse();
        //FTPダウンロード
        st = rs.GetResponseStream();
        Byte[] bytes = new Byte[0] { };
        int ttlSiz = 0;
        int oneSiz;
        do
        {
            Array.Resize<Byte>(ref bytes, 1024 * 100);
            oneSiz = st.Read(bytes, 0, bytes.Length);
            if (oneSiz > 0)
            {
                Array.Resize<Byte>(ref dat, ttlSiz + oneSiz);
                if (oneSiz != bytes.Length)
                {
                    Array.Resize<Byte>(ref bytes, oneSiz);
                }
                bytes.CopyTo(dat, ttlSiz);
                ttlSiz = ttlSiz + oneSiz;
            }
        } while (oneSiz > 0);

        return dat;
    }
    catch (Exception ex)
    {
        throw ex;
    }
    finally
    {
        if (st != null)
        {
            st.Close();
            st = null;
        }
        if (rs != null)
        {
            rs.Close();
            rs = null;
        }
    }
}
// ----------------------------------------------------------

花火大会のヨーキー景吾 | トップページへ戻る | WEBページ更新チェック(C#/VB.NET)

このページのトップに戻る

コメント

名前
題名
メールアドレス
WEBサイト
 
コメント
パスワード
  管理者にだけ表示を許可する

このページのトップに戻る

トラックバック

このページのトップに戻る