NonSoft

WEBやFTPでファイルをダウンロードする
サンプル(C#.NET)


 サンプル(ソース/コード)
WebRequestとWebResponseによるWEBダウンロードのサンプルソース(C#.NET)と、
FtpWebRequestとWebResponseによるFTPダウンロードのサンプルソース(C#.NET)です。

WebRequestとFtpWebRequestは使い方が殆ど同じなのでソースコードの流用が可能です。

1.WEBダウンロードのサンプル(VB.NET) WEBダウンロードのサンプル(C#.NET)
2.FTPダウンロードのサンプル(VB.NET) FTPダウンロードのサンプル(C#.NET)

関連サンプル:WIN32APIによるFTP(File Transfer Protocol)送受信のサンプル(VB.NET)
関連サンプル:WIN32APIによるFTP(File Transfer Protocol)送受信のサンプル(VB6)
関連サンプル:BASP21によるFTPアップロード/ダウンロードのサンプル(VBS/VBA)
関連ツール :FTPで差分アップロード/差分ダウンロードするツール
関連ツール :FTP対応のフォルダ同期ツール(フォルダ監視人)

★WEBダウンロード(Form1.cs)
private void button1_Click(object sender, EventArgs e)
{
    // WEBファイルのダウンロード
    Byte[] dat = GetWebFile("http://xxx.xxx.com/xxx.html");
}

// WEBファイルのダウンロード
private Byte[] GetWebFile(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.WebRequest rq = 
            ((System.Net.HttpWebRequest)
            System.Net.WebRequest.Create(url));

        // HTTP圧縮(GZIP)への対応-------------------------
        // ((System.Net.HttpWebRequest)rq).AutomaticDecompression =
        //     System.Net.DecompressionMethods.GZip;
        // -----------------------------------------------

        // ブラウザの種類の設定
        ((System.Net.HttpWebRequest)rq).UserAgent =
            "Mozilla/4.0 (compatible; MSIE 6.0; Windows XP)";
        // 使用言語の設定
        ((System.Net.HttpWebRequest)rq).Headers.Add(
            "Accept-Language", "ja");
        // FTPサーバーへ接続
        rs = rq.GetResponse();
        // ダウンロード開始
        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;
        }
    }
}

★FTPダウンロード(Form1.cs)
private void button1_Click(object sender, EventArgs e)
{
    // FTPファイルのダウンロード
    Byte[] dat = GetFtpFile("ftp://xxx.xxx.com/xxx.txt");
}

// 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));

        // ユーザとパスワードの設定
        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();
        // ダウンロード開始
        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;
        }
    }
}