<file_sep>﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml;

namespace Gay_Podcast_Access
{
    class Episode_Download
    {
        /* めもでござりゅ
         * 
         * 動作としては、1つのファイル毎に繰り返す仕様にしたい
         * 
         * RSS.XMLからURLとかいろいろ読み出す
         * ↓
         * ダウンロードするURLとか変数に代入
         * ↓
         * ループ作業
         * ↓
         * URLのHTTPステータスチェック
         * ↓
         * ダウンロード開始するぅ
         * ↓
         * ダウンロード終わったやでって来た
         * ↓
         * 次のURLの設定
         * ↓
         * ループの頭へ
         */

        private void Xml_Extraction(string RSS_File, string File_Saving)
        {
            XmlDocument xmlDocument = new XmlDocument();
            xmlDocument.Load(RSS_File);

            try
            {
                XmlElement xmlElement = xmlDocument.DocumentElement;
                XmlNodeList xmlNodeList_enclosure = xmlElement.GetElementsByTagName("enclosure");
                XmlNodeList xmlNodeList_title = xmlElement.GetElementsByTagName("title");
                string[] episode_url = new string[xmlNodeList_enclosure.Count];
                string[] episode_title = new string[xmlNodeList_title.Count];
                bool[] catch_data = new bool[2];

                // エピソードURLの取得
                if (xmlNodeList_enclosure.Count != 0)
                {
                    for (int i = 0; i < xmlNodeList_enclosure.Count; i++) // URLの取得
                    {
                        XmlElement element = (XmlElement)xmlNodeList_enclosure.Item(i);
                        episode_url[i] = element.GetAttribute("url");
                        catch_data[0] = true;
                    }
                    download_all = xmlNodeList_enclosure.Count;
                }
                else
                {
                    DialogResult choose = MessageBox.Show("\"enclosure\"タグが存在しません。RSSファイルを確認してください。\nRSSファイルを開きますか?", "タグが見つかりません", MessageBoxButtons.YesNo, MessageBoxIcon.Error);
                    if (choose == DialogResult.Yes)
                    {
                        System.Diagnostics.Process P = System.Diagnostics.Process.Start(RSS_File);
                        bool result = P.Start();
                    }
                }

                // titleの取得
                if (xmlNodeList_title.Count != 0)
                {
                    for (int i = 0; i < xmlNodeList_title.Count; i++)
                    {
                        episode_title[i] = xmlNodeList_title.Item(i).InnerText;
                        catch_data[1] = true;
                    }
                }
                else
                {
                    DialogResult choose = MessageBox.Show("\"title\"タグが存在しません。RSSファイルを確認してください。\nRSSファイルを開きますか?", "タグが見つかりません", MessageBoxButtons.YesNo, MessageBoxIcon.Error);
                    if (choose == DialogResult.Yes)
                    {
                        System.Diagnostics.Process P = System.Diagnostics.Process.Start(RSS_File);
                        bool result = P.Start();
                    }
                }

                if (catch_data[0] == true && catch_data[1] == true)
                {
                    for (int i = 0; i < episode_url.Length; i++)
                    {
                        string[] httpstatus_code = new string[2];
                        httpstatus_code = HttpStatus(episode_url[i]);
                        if (httpstatus_code[0] == "OK" && httpstatus_code[1] == "OK")
                            Download_check(episode_url[i], Folder_URI, Episode_Title_CATCH(i, episode_url, episode_title));
                    }
                }
            }
            catch (XmlException Exception) //Exception発生時のエラーメッセ表示
            {
                MessageBox.Show("Error: " + Exception.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }
    }
}
<file_sep>﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.IO;

namespace Split4
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            String FileUrl = "C:\\Users\\guxtu\\Downloads\\削除コマンド確認用";
            DeleteFile(FileUrl);
        }

        public void DeleteFile(String targetDirectoryPath)
        {
            if (!Directory.Exists(targetDirectoryPath))
            {
                return;
            }

            //ディレクトリ以外の全ファイルを削除
            string[] filePaths = Directory.GetFiles(targetDirectoryPath);
            foreach (string filePath in filePaths)
            {
                File.SetAttributes(filePath, FileAttributes.Normal);
                Console.WriteLine("Delete: " + filePath);
                File.Delete(filePath);
            }
        }
    }
}
<file_sep>﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml;

// 目的: RSSからURLを取り出す

namespace Split3
{
    public partial class Form1 : Form
    {
        private const bool T = true;
        private const bool F = false;

        public Form1()
        {
            InitializeComponent();

        }

        private void button1_Click(object sender, EventArgs e)
        {
            // 動作内容: RSSファイル(.rss)を選択する → TextBox1にファイルアドレスを表示する
            //OpenFileDialogクラスのインスタンスを作成
            OpenFileDialog ofd = new OpenFileDialog
            {
                //はじめに表示されるフォルダを指定
                InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.UserProfile),
                //[ファイルの種類]に表示される選択肢を指定
                Filter = "RSS File(*.rss)|*.rss",
                //タイトルを設定する
                Title = "Choose the RSS fle you want to road",
                //ダイアログボックスを閉じる前に現在のディレクトリを復元するようにする
                RestoreDirectory = T
            };

            //ダイアログを表示する
            if (ofd.ShowDialog() == DialogResult.OK)
            {
                //OKボタンがクリックされたとき、選択されたファイル名を表示する
                textBox1.Text = ofd.FileName;
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            // 動作内容: RSSファイルの読み込み → ファイルから特定のタグを検索 → 検索したタグから属性を抽出

            // 1. XMLの読み込み
            XmlDocument xmlDocument = new XmlDocument();
            xmlDocument.Load(textBox1.Text);


            try // 2. XMLから特定のタグを検索
            {
                XmlElement xmlElement = xmlDocument.DocumentElement;
                XmlNodeList xmlNodeList = xmlElement.GetElementsByTagName("enclosure");
                if (xmlNodeList.Count != 0)
                {
                    // 3.XMLのタグから属性を抽出
                    String[] urls = new String[xmlNodeList.Count];
                    for (int i = 0; i < xmlNodeList.Count; i++)
                    {
                        XmlElement element = (XmlElement)xmlNodeList.Item(i);
                        urls[i] = element.GetAttribute("url"); ;
                    }
                    Message(string_add(urls), "Tags", MessageBoxIcon.Information);
                }
                else
                {
                    DialogResult choose = MessageBox.Show("\"enclosure\"タグが存在しません。RSSファイルを確認してください。\nRSSファイルを開きますか?", "タグが見つかりません", MessageBoxButtons.YesNo, MessageBoxIcon.Error);
                    if (choose == DialogResult.Yes)
                    {
                        System.Diagnostics.Process P = System.Diagnostics.Process.Start(textBox1.Text);
                        bool result = P.Start();
                    }
                }
            }
            catch (XmlException Exception) //Exception発生時のエラーメッセ表示
            {
                Message("Error: " + Exception.Message, "Error", MessageBoxIcon.Error);
            }
        }

        public void Message(String mes, String head, MessageBoxIcon icon)
        {
            // 動作内容: メッセージボックスの表示。それだけ。
            MessageBox.Show(mes, head, MessageBoxButtons.OK, icon);
        }

        public String string_add(String[] tags)
        {
            // 動作内容: URLの表示をするために各行毎に改行を入れる
            String return_text = "";
            for (int i = 0; i < tags.Length; i++) return_text = return_text + tags[i] + "\n";
            return return_text;
        }
    }
}
<file_sep>﻿using System;
using System.IO;
using System.Net;
using System.Windows.Forms;

namespace Gay_Podcast_Access
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        // UI部品設定
        private void button1_Click(object sender, EventArgs e)
        {
            //フォルダの指定を行う
            // メモの1番
            FolderBrowserDialog file = new FolderBrowserDialog();
            file.Description = "フォルダを指定してください。";
            file.ShowNewFolderButton = true;
            if (file.ShowDialog(this) == DialogResult.OK)
                label3.Text = file.SelectedPath;
        }

        private void button4_Click(object sender, EventArgs e)
        {
            this.Close();
        }

        private void timer1_Tick(object sender, EventArgs e)
        {
            if (textBox1.Text != "" && label3.Text != "")
            {
                button2.Enabled = true;
                timer1.Enabled = false;
            }
        }

        private void button2_Click(object sender, EventArgs e)
        {
            DialogResult really = MessageBox.Show("これよりエピソードのダウンロードを行います。\n指定したフォルダーのデータが全て削除されます。\n本当に構いませんか?", "Ready to Download", MessageBoxButtons.OKCancel, MessageBoxIcon.Question);
            if (really == DialogResult.OK)
                Download_Portal(textBox1.Text, label3.Text.Replace("\\", "\\\\"), "rss.xml");
        }

        //RSSのダウンロード
        string File_URL_Data = "";

        // ベースポータル
        public void Download_Portal(string web_address, string folder_address, string File_Name)
        {
            string[] Status = new string[2];
            Status = HttpStatus(web_address);
            if (Status[0] == "OK")
            {
                Uri uriResult;
                // URIの有効性の確認
                bool result = Uri.TryCreate(web_address, UriKind.Absolute, out uriResult)
                    && (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps);
                if (result) file_download(web_address, folder_address, File_Name);
            }
        }

        // HTTPステータスの確認
        public string[] HttpStatus(string check_URI)
        {
            string access_url = null;
            string[] access_code = { "ERROR", "ERROR" };

            //URIの有効性の確認
            Uri uriResult;
            bool result = Uri.TryCreate(check_URI, UriKind.Absolute, out uriResult)
                && (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps);

            if (result)
            {
                ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12;
                HttpWebRequest webreq = (HttpWebRequest)WebRequest.Create(check_URI);
                HttpWebResponse webres = null;
                try
                {
                    webres = (HttpWebResponse)webreq.GetResponse();
                    access_url = webres.ResponseUri.ToString();
                    access_code[0] = webres.StatusCode.ToString();
                    Console.WriteLine("HTTPStatus_Response: " + webres.StatusCode + ", " + webres.StatusDescription);
                    access_code[1] = webres.StatusDescription;
                }
                catch (WebException ex)
                {
                    if (ex.Status == WebExceptionStatus.ProtocolError)
                    {
                        HttpWebResponse errres = (HttpWebResponse)ex.Response;
                        access_url = errres.ResponseUri.ToString(); access_code[0] = errres.StatusCode.ToString();
                        access_code[1] = errres.StatusDescription;
                    }
                }
                finally { if (webres != null) webres.Close(); }
            }
            else
                MessageBox.Show("有効なURLではありません。", "確認してください", MessageBoxButtons.OK, MessageBoxIcon.Error);
            return access_code;
        }

        // ファイルのダウンロード
        string episode_rss = "";

        private void file_download(string RSS_URI, string Folder_URI, string File_Name)
        {
            WebClient downloadClient = null;
            DeleteFile(Folder_URI);
            File_URL_Data = Folder_URI;
            string File_data = Folder_URI + "\\" + File_Name;
            episode_rss = File_data.Replace("\\\\", "\\");
            Uri u = new Uri(RSS_URI);
            //WebClientの作成
            if (downloadClient == null)
            {
                downloadClient = new WebClient();
                //イベントハンドラの作成
                downloadClient.DownloadProgressChanged +=
                                        new DownloadProgressChangedEventHandler(
                                            downloadClient_DownloadProgressChanged);
                downloadClient.DownloadFileCompleted +=
                                        new System.ComponentModel.AsyncCompletedEventHandler(
                                            downloadClient_DownloadFileCompleted);
            }
            //非同期ダウンロードを開始する
            downloadClient.DownloadFileAsync(u, File_data);
        }

        private void downloadClient_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
        {
            Console.WriteLine("{0}% ({1}byte 中 {2}byte) ダウンロードが終了しました。",
                e.ProgressPercentage, e.TotalBytesToReceive, e.BytesReceived);
        }

        private void downloadClient_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
        {
            if (e.Cancelled)
            {
                MessageBox.Show(
                    "ダウンロードがキャンセルされました",
                    "キャンセル動作がありました",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Error);
            }
            else if (e.Error != null)
            {
                MessageBox.Show(
                    "ダウンロード中にエラーが発生しました。\nエラー内容: " + e.Error.Message,
                    "エラーが発生しました",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Error);
            }
            else
            {
                DialogResult Episode = MessageBox.Show(
                    "RSSファイルのダウンロードが完了しました\nこれより、エピソードのダウンロードを開始します。",
                    "ダウンロード完了",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Information);
                if (Episode == DialogResult.OK)
                {
                    Episode_Download episode_download = new Episode_Download();
                    episode_download.Xml_Extraction(episode_rss, File_URL_Data);
                }
            }
        }

        // ファイルの削除
        public void DeleteFile(string targetDirectoryPath)
        {
            if (!Directory.Exists(targetDirectoryPath)) return;
            //ディレクトリ以外の全ファイルを削除
            string[] filePaths = Directory.GetFiles(targetDirectoryPath);
            foreach (string filePath in filePaths)
            {
                File.SetAttributes(filePath, FileAttributes.Normal);
                Console.WriteLine("Delete: " + filePath);
                File.Delete(filePath);
            }
        }
    }
}<file_sep># Podcasts_RSS-Windows
げいぽのRSSを解析し、自動更新するようなプログラム。
<file_sep>﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Xml;

namespace Gay_Podcast_Access
{
    class Episode_Downloaded
    {
        int download_complete = 0, download_all;

        public void episodeDownload_Portal(string RSS_File, string Folder_URI)
        {
            XmlDocument xmlDocument = new XmlDocument();
            xmlDocument.Load(RSS_File);

            try
            {
                XmlElement xmlElement = xmlDocument.DocumentElement;
                XmlNodeList xmlNodeList_enclosure = xmlElement.GetElementsByTagName("enclosure");
                XmlNodeList xmlNodeList_title = xmlElement.GetElementsByTagName("title");
                string[] episode_url = new string[xmlNodeList_enclosure.Count];
                string[] episode_title = new string[xmlNodeList_title.Count];
                bool[] catch_data = new bool[2];

                // エピソードURLの取得
                if (xmlNodeList_enclosure.Count != 0)
                {
                    for (int i = 0; i < xmlNodeList_enclosure.Count; i++) // URLの取得
                    {
                        XmlElement element = (XmlElement)xmlNodeList_enclosure.Item(i);
                        episode_url[i] = element.GetAttribute("url");
                        catch_data[0] = true;
                    }
                    download_all = xmlNodeList_enclosure.Count;
                }
                else
                {
                    DialogResult choose = MessageBox.Show("\"enclosure\"タグが存在しません。RSSファイルを確認してください。\nRSSファイルを開きますか?", "タグが見つかりません", MessageBoxButtons.YesNo, MessageBoxIcon.Error);
                    if (choose == DialogResult.Yes)
                    {
                        System.Diagnostics.Process P = System.Diagnostics.Process.Start(RSS_File);
                        bool result = P.Start();
                    }
                }

                // titleの取得
                if (xmlNodeList_title.Count != 0)
                {
                    for (int i = 0; i < xmlNodeList_title.Count; i++)
                    {
                        episode_title[i] = xmlNodeList_title.Item(i).InnerText;
                        catch_data[1] = true;
                    }
                }
                else
                {
                    DialogResult choose = MessageBox.Show("\"title\"タグが存在しません。RSSファイルを確認してください。\nRSSファイルを開きますか?", "タグが見つかりません", MessageBoxButtons.YesNo, MessageBoxIcon.Error);
                    if (choose == DialogResult.Yes)
                    {
                        System.Diagnostics.Process P = System.Diagnostics.Process.Start(RSS_File);
                        bool result = P.Start();
                    }
                }

                if (catch_data[0] == true && catch_data[1] == true)
                {
                    for (int i = 0; i < episode_url.Length; i++)
                    {
                        string[] httpstatus_code = new string[2];
                        httpstatus_code = HttpStatus(episode_url[i]);
                        if (httpstatus_code[0] == "OK" && httpstatus_code[1] == "OK")
                            Download_check(episode_url[i], Folder_URI, Episode_Title_CATCH(i, episode_url, episode_title));
                    }
                }
            }
            catch (XmlException Exception) //Exception発生時のエラーメッセ表示
            {
                MessageBox.Show("Error: " + Exception.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
        }

        // HTTPステータスの確認
        public string[] HttpStatus(string check_URI)
        {
            string access_url = null;
            string[] access_code = new string[2];

            //URIの有効性の確認
            Uri uriResult;
            bool result = Uri.TryCreate(check_URI, UriKind.Absolute, out uriResult)
                && (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps);

            if (result)
            {
                ServicePointManager.SecurityProtocol |= SecurityProtocolType.Tls12;
                HttpWebRequest webreq = (HttpWebRequest)WebRequest.Create(check_URI);
                HttpWebResponse webres = null;
                try
                {
                    webres = (HttpWebResponse)webreq.GetResponse();
                    access_url = webres.ResponseUri.ToString();
                    access_code[0] = webres.StatusCode.ToString();
                    Console.WriteLine("HTTPStatus_Response: " + webres.StatusCode + ", " + webres.StatusDescription);
                    access_code[1] = webres.StatusDescription;
                }
                catch (WebException ex)
                {
                    if (ex.Status == WebExceptionStatus.ProtocolError)
                    {
                        HttpWebResponse errres = (HttpWebResponse)ex.Response;
                        access_url = errres.ResponseUri.ToString(); access_code[0] = errres.StatusCode.ToString();
                        access_code[1] = errres.StatusDescription;
                    }
                }
                finally
                {
                    //閉じる
                    if (webres != null) webres.Close();
                }

            }
            else
            {
                MessageBox.Show("有効なURLではありません。", "確認してください", MessageBoxButtons.OK, MessageBoxIcon.Error);
                access_code[0] = "Error";
                access_code[1] = "Error";
            }
            return access_code;
        }

        private string Episode_Title_CATCH(int i, string[] episode_url, string[] episode_title)
        {
            int index = episode_url[i].LastIndexOf(".");
            return (i + 1).ToString("D3") + "_" + episode_title[0] + " - " + episode_title[(episode_title.Length - episode_url.Length + i)] + episode_url[i].Substring(index);
        }

        // ファイルのダウンロード
        public void Download_check(string RSS_URI, string Folder_URI, string File_Name)
        {
            WebClient downloadClient = null;
            string episode_rss = "";
            Uri uriResult;
            // URIの有効性の確認
            bool result = Uri.TryCreate(RSS_URI, UriKind.Absolute, out uriResult)
                && (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps);
            string File_data = Folder_URI + "\\" + File_Name;
            episode_rss = File_data.Replace("\\\\", "\\");
            Uri u = new Uri(RSS_URI);
            downloadClient = new WebClient();
            //イベントハンドラの作成
            downloadClient.DownloadProgressChanged +=
                                    new DownloadProgressChangedEventHandler(
                                        downloadClient_DownloadProgressChanged);
            downloadClient.DownloadFileCompleted +=
                                    new System.ComponentModel.AsyncCompletedEventHandler(
                                        downloadClient_DownloadFileCompleted);
            //非同期ダウンロードを開始する
            downloadClient.DownloadFile(u, File_data);
        }

        private void downloadClient_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
        {
            Console.WriteLine("{0}% ({1}byte 中 {2}byte) ダウンロードが終了しました。",
                e.ProgressPercentage, e.TotalBytesToReceive, e.BytesReceived);
        }

        private void downloadClient_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
        {
            if (e.Cancelled)
            {
                MessageBox.Show(
                    "ダウンロードがキャンセルされました",
                    "キャンセル動作がありました",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Error);
            }
            else if (e.Error != null)
            {
                MessageBox.Show(
                    "ダウンロード中にエラーが発生しました。\nエラー内容: " + e.Error.Message,
                    "エラーが発生しました",
                    MessageBoxButtons.OK,
                    MessageBoxIcon.Error);
            }
            else
            {
                download_complete++;
                if (download_all != download_complete)
                    MessageBox.Show("ダウンロード完了しました。\n残り" + (download_all - download_complete) + "件", "Download Finish", MessageBoxButtons.OK, MessageBoxIcon.Information);
                else
                    MessageBox.Show("全てのエピソードのダウンロードが完了しました", "Download Complete!", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
        }
    }
}
<file_sep>﻿using System;
using System.Windows.Forms;

namespace Split1
{
    class urlaccess
    {
        public void accessCheck(String url)
        {
            String access_url = null;
            String[] access_code = new String[2];

            //URIの有効性の確認
            Uri uriResult;
            bool result = Uri.TryCreate(url, UriKind.Absolute, out uriResult)
                && (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps);

            if (result)
            {
                //WebRequestの作成
                System.Net.HttpWebRequest webreq = (System.Net.HttpWebRequest)System.Net.WebRequest.Create(url);

                System.Net.HttpWebResponse webres = null;
                try
                {
                    //サーバーからの応答を受信するためのWebResponseを取得
                    webres = (System.Net.HttpWebResponse)webreq.GetResponse();

                    //応答したURIを表示する
                    access_url = webres.ResponseUri.ToString();
                    //応答ステータスコードを表示する
                    access_code[0] = webres.StatusCode.ToString();
                    Console.WriteLine(webres.StatusCode + ", " + webres.StatusDescription);
                    access_code[1] = webres.StatusDescription;
                }
                catch (System.Net.WebException ex)
                {
                    //HTTPプロトコルエラーかどうか調べる
                    if (ex.Status == System.Net.WebExceptionStatus.ProtocolError)
                    {
                        //HttpWebResponseを取得
                        System.Net.HttpWebResponse errres = (System.Net.HttpWebResponse)ex.Response;
                        //応答したURIを表示する
                        access_url = errres.ResponseUri.ToString();
                        //応答ステータスコードを表示する
                        access_code[0] = errres.StatusCode.ToString();
                        access_code[1] = errres.StatusDescription;
                    }
                }
                finally
                {
                    //閉じる
                    if (webres != null)
                        webres.Close();
                }

                MessageBox.Show("接続URL: " + access_url + "\n" + "HTTPステータス: " + access_code[0] + " " + access_code[1], "HTTP接続結果", MessageBoxButtons.OK, MessageBoxIcon.Information);
            }
            else
                MessageBox.Show("有効なURLではありません。", "確認してください", MessageBoxButtons.OK, MessageBoxIcon.Error);
        }
    }
}<file_sep>﻿using System;
using System.Net;
using System.Windows.Forms;

namespace Split2
{
    class Download
    {
        String Folder_URI = "", url = "", DL_File_Name = "";
        WebClient downloadClient = null;
        public void url_checker(String url, String DL_File_Name)
        {
            Uri uriResult;
            // URIの有効性の確認
            bool result = Uri.TryCreate(url, UriKind.Absolute, out uriResult)
                && (uriResult.Scheme == Uri.UriSchemeHttp || uriResult.Scheme == Uri.UriSchemeHttps);
            url = this.url;
            DL_File_Name = this.DL_File_Name;

            // URIの有効時
            if (result)
            {
                Uri_RSScheck();
            }
            else
            {
                Message("正しいURLを入力してください", "確認してください", "Error");
            }
        }

        private void Uri_RSScheck()
        {
            // URIがRSSを指定しているかどうかを確認
            if ((url.Substring(url.Length - 3)) == "rss")
            {
                Folder_DL_Specified();
            }
            else
            {
                Message("正しいAnchorが提供しているRSSフィードURLではありません", "確認してください", "Error");
            }
        }

        private void Folder_DL_Specified()
        {
            FolderBrowserDialog fbDialog = new FolderBrowserDialog
            {
                // ダイアログの説明文を指定する
                Description = "ダイアログの説明文",
                // デフォルトのフォルダを指定する
                SelectedPath = @"C:",
                // 「新しいフォルダーの作成する」ボタンを表示する
                ShowNewFolderButton = true
            };
            //フォルダを選択するダイアログを表示する
            if (fbDialog.ShowDialog() == DialogResult.OK)
            {
                Folder_URI = fbDialog.SelectedPath;
            }

            if (Folder_URI != "") file_download();
            else
            {
                Message("フォルダ選択中にキャンセルされたか、問題が発生しました", "確認してください", "Error");
            }
        }

        private void file_download()
        {
            //ダウンロードしたファイルの保存先
            string fileName = Folder_URI + "\\" + DL_File_Name + ".rss";
            //ダウンロード元のURL
            Uri u = new Uri(url);

            //WebClientの作成
            if (downloadClient == null)
            {
                downloadClient = new WebClient();
                //イベントハンドラの作成
                downloadClient.DownloadProgressChanged +=
                                        new DownloadProgressChangedEventHandler(
                                            downloadClient_DownloadProgressChanged);
                downloadClient.DownloadFileCompleted +=
                                        new System.ComponentModel.AsyncCompletedEventHandler(
                                            downloadClient_DownloadFileCompleted);
            }
            //非同期ダウンロードを開始する
            downloadClient.DownloadFileAsync(u, fileName);
        }

        private void downloadClient_DownloadProgressChanged(object sender, DownloadProgressChangedEventArgs e)
        {
            Console.WriteLine("{0}% ({1}byte 中 {2}byte) ダウンロードが終了しました。",
                e.ProgressPercentage, e.TotalBytesToReceive, e.BytesReceived);
        }

        private void downloadClient_DownloadFileCompleted(object sender, System.ComponentModel.AsyncCompletedEventArgs e)
        {
            String neko = null;
            if (e.Cancelled)
            {
                neko = "キャンセルされました。";
            }
            else if (e.Error != null)
            {
                neko = "エラー: " + e.Error.Message;
            }
            else
            {
                neko = "ダウンロードが完了しました。";
            }

            Message(neko, "ダウンロード", "Information");
        }

        private void Message(String Text, String Heading, String Icon)
        {
            MessageBoxIcon ico = new MessageBoxIcon();
            switch(Icon){
                case "Asterisk":
                    ico = MessageBoxIcon.Asterisk; //円で囲まれた小文字の i から成る記号
                    break;

                case "Error":
                    ico = MessageBoxIcon.Error; //背景が赤の円で囲まれた白い X から成る記号
                    break;

                case "Exclamation":
                    ico = MessageBoxIcon.Exclamation; //背景が黄色の三角形で囲まれた感嘆符から成る記号
                    break;

                case "Hand":
                    ico = MessageBoxIcon.Hand; //背景が赤の円で囲まれた白い X から成る記号
                    break;

                case "Information":
                    ico = MessageBoxIcon.Information; //円で囲まれた小文字の i から成る記号
                    break;

                case "None":
                    ico = MessageBoxIcon.None; //記号を表示しません
                    break;

                case "Question":
                    ico = MessageBoxIcon.Question; //円で囲んだ疑問符から成るシンボルが含まれます。 疑問符は、質問の特定の種類を明確に表さず、メッセージの言い回しはどのメッセージの種類にも適用されるため、疑問符のメッセージ アイコンは推奨されなくなりました。 さらにユーザーは、疑問符シンボルをヘルプ情報シンボルと混同することがあります。 したがって、メッセージ ボックスには疑問符シンボルを使用しないでください。 システムは引き続き、下位互換性のためだけに、その組み込みをサポートします。
                    break;

                case "Stop":
                    ico = MessageBoxIcon.Stop; //背景が赤い円で囲んだ白い X から成る記号
                    break;

                case "Warning":
                    ico = MessageBoxIcon.Warning; //背景が黄色い三角で囲んだ感嘆符から成る記号
                    break;

                default:
                    ico = MessageBoxIcon.None;
                    break;
            }
            MessageBox.Show(Text, Heading, MessageBoxButtons.OK, ico);
        }
    }
}
