顯示具有 C 語言家族 標籤的文章。 顯示所有文章
顯示具有 C 語言家族 標籤的文章。 顯示所有文章

用程式自動建立 YouTube 播放清單

舉凡基督徒對於【水深之處】想必是早有耳聞,
不過,你知道他們在 YouTube 也有提供一系列的視頻影片嗎?

今天,就藉由創建【水深之處】的視頻播放清單過程,
來展現如何在 YouTube 環境中,利用工具程式的使用,提升做事效能的方法。

首先,先了解【水深之處】目前有哪些類型的視頻?

  • 【以色列生活特輯】- 3
  • 【以色列直播】- 23
  • 【以色列特輯】- 36
  • 【探索以色列】- 60

如上所示,【水深之處】目前四個類型的視頻內容,其中每個類型名稱之後的數字,表示現今的視頻數量。(約計有 122個視頻)

今天,假若你負責此一事務的同工,請問 122個視頻,

  1. 需要先上傳到 YouTube 的時間,是多久?(上傳視頻自動化處理的介紹,容後敘述!)
  2. 將已經上傳好的視頻,加以分類、歸檔,建置成相對應的播放清單,又要花費多少時間?(這就是本文的重點!)

處理作業:

  1. 使用 參考資源 項次1  提及的工具檔案【YouTube播放清單-建置XML.xlsm】
    建立好四個類型的 播放清單建置檔案(*.xml)
  2. 應用創建【播放清單】的工具程式:CreatePlaylist.exe
    在 DOS 命令行,執行 CreatePlaylist.exe 【以色列生活特輯】.xml ,以產生【以色列生活特輯】播放清單。
    同理,分別執行
    ◎ CreatePlaylist.exe 【以色列直播】.xml ,以產生【以色列生活直播】播放清單。
    ◎ CreatePlaylist.exe 【以色列特輯】.xml ,以產生【以色列特輯】播放清單。
    ◎ CreatePlaylist.exe 【探索以色列】.xml ,以產生【探索以色列】播放清單。
    當然,也可以一次性執行。(可參考【播放清單】工具程式(CreatePlaylist.exe) 中的 水深之處.cmd)
  3. 下載【播放清單】工具程式 (CreatePlaylist.exe) 來用吧!http://bit.ly/2HjShr1
    記得:使用前,自己要申請 Google 認證用憑證,並建立好 client_secrets.json;將它和工具程式 (CreatePlaylist.exe) 放在一起。

結論:
就如上面的處理作業描述,要將122 個視頻項目,加以分類並建立成四個播放清單。
請問,若是你用手工操作,需要多少處理時間?
你知道嗎?如果改用創建【播放清單】工具程式來處理只需要 02’ 23.2”。
重點是,當你下完處理指令後,你就可以完全交給電腦來運作,你本人不需要一直待在電腦旁,還可以去處理其他事情。
image

總之,好工具就要好好使用。
若有不明瞭的地方,可郵件聯絡。mailto:pertonchang@gmail.com

參考資源:

  1. 創建產生播放清單的規格檔案 -- XML
  2. C# 讀取 XML 檔案內容的程式實例
  3. Google API & VS.NET C# @2013 – 03
  4. Google API & VS.NET C# @2013 - 04

C# 讀取 XML 檔案內容的程式實例

在處理用程式語言讀取 XML 的過程中,搜尋過一些網路範例;
雖然,有不少範例,卻如無法解決個人的實際需求。
主因是大多數的範例其讀取的 XML 內容,是屬於“正規化”型的資料;也就是 XML 檔案除了根元素外,就是一階式的資料。
而 XML 資料的實際內容如下:

---------------------------------
<?xml version = "1.0" encoding = "UTF-8" ?>
<videos>
     <head>
         <item>0</item>
         <url></url>
         <name>太古歷史</name>
         <description></description>
         <privacy>public</privacy>
     </head>
     <details>
         <detail>
             <item>1</item>
             <url>https://www.youtube.com/watch?v=b75lPfjI4k8</url>
             <name>第一课:完美的世界</name>
             <description></description>
         </detail>
         <detail>
             <item>2</item>
             <url>https://www.youtube.com/watch?v=Vhi-ZrpnNOY</url>
             <name>第二课:失而复得的乐园</name>
             <description></description>
         </detail>
         。。。。。
     </details>
</videos>
-------------------------------
PS:上述 XML 檔案(video.xml)將會在未來幾篇文章中,再次提及。它將被使用在 YouTube 視頻檔案的管理及應用裡!

從 XML 的內容樣式來看,它具有表頭標籤(head)、表身群標籤(details))、表身標籤(detail)等區塊。
程式要負責將表頭的5個元素、將表身『每一個』節點的4個元素值,加以讀出並存放在公用變數中。

  1. 宣告公用變數
  2. 讀取表頭元素值
  3. 讀取表身每一個節點的元素值

程式如下:

================================

static string PlaylistItem;
static string PlaylistURL;
static string PlaylistName;
static string PlaylistDesc;
static string PlaylistPrivacy;
static int XmlDetailsCnt;
static int XmlDetailElements = 4;
static string[] aryDB;      // 程式中,動態定義陣列大小
static string[,] aryXML;    // 程式中,動態定義陣列大小


// 讀取表頭元素值

static void GetXML_Header(string pXML)
{
     XmlDocument doc = new XmlDocument();
     doc.Load(pXML);

    XmlNodeList nodes = doc.DocumentElement.SelectNodes("/videos/head");

    PlaylistItem = nodes[0].SelectSingleNode("item").InnerText;
     PlaylistURL = nodes[0].SelectSingleNode("url").InnerText;
     PlaylistName = nodes[0].SelectSingleNode("name").InnerText;
     PlaylistDesc = nodes[0].SelectSingleNode("description").InnerText;
     PlaylistPrivacy = nodes[0].SelectSingleNode("privacy").InnerText;
}


// 讀取表身每一個節點的元素值

static void GetXML_Details(string pXML)
{
     XmlDocument doc = new XmlDocument();
     doc.Load(pXML);

    XmlNodeList nodes = doc.DocumentElement.SelectNodes("/videos/details/detail");

    XmlDetailsCnt = nodes.Count;
     aryXML = new string[XmlDetailsCnt, XmlDetailElements];
     aryDB = new string[XmlDetailsCnt];

    int i = 0;
     foreach (XmlNode node in nodes)
     {
         aryXML[i, 0] = node.SelectSingleNode("item").InnerText;
         aryXML[i, 1] = node.SelectSingleNode("url").InnerText;
         aryXML[i, 2] = node.SelectSingleNode("name").InnerText;
         aryXML[i, 3] = node.SelectSingleNode("description").InnerText;

        aryDB[i] = PaserVideoID(aryXML[i, 1]);

        i = i + 1;
     }
}

================================

Google API & VS.NET C# @2015 - 01

約略三年多前,因著需要將視頻檔案 上傳 到 YouTube 網路環境裡,
也為了要節省自己的時間,提升做事效能;
所以,開始接觸上傳視頻到 YouTube 過程的程式化,
進而撰寫的幾篇這類型相關的文章:

  1. Google API & VS.NET C# @2013 – 01
  2. Google API & VS.NET C# @2013 – 02
  3. Google API & VS.NET C# @2013 – 03
  4. Google API & VS.NET C# @2013 – 04
  5. Google API & VS.NET C# @2013 – 05

這些文章的撰寫,當時的程式開發環境,約略是使用 Visual Studio .NET 2013。

但是,現在的開發環境則是使用 Visual Studio .NET 2015 或是 2017。
為此接下來,會有些文章來述說,新版開發環境【VS 2015】與舊版的差異,希望這些對你有所助益。

★★ 在專案中,將 NuGet Packages 引入
------------------------------------------------------

因為在專案中,會使用到 YouTube 相關的 Library。所以要做【NuGet Packages 引入】動作。
其中,要引入的程式庫會因程式需求不用,請自行更換需要的程式名稱。

一般會用到的程式名稱,有:

  • Google.Apis.Discovery
  • Google.Apis.YouTube.v3


【NuGet Packages 引入】的方法有三種:

方法一:從【方案總管 (Solution Exploer)】/ 參考 (滑鼠右鍵) / 管理 NuGet 套件。

image


    方法二:從工具列中的【工具】/ NuGet 封裝管理員 / 管理方案的 NuGet 套件。

    image


    方法三:從工具列中的【專案】/ 管理 NuGet 套件。

    image


      在 NuGet 封裝管理員視窗裡

      image

      搜尋所需要的 Library:例如【Google.Apis.Discovery】

      image

      image

      按下【安裝】鍵後

      image

      image

      image


      安裝完成:

      image

      Window Form 事件的運行順序 (Order of Events in Windows Forms)

      在設計希伯來文生字卡產生工具的過程中,曾遇到一個問題:需要在視窗顯示完成後,自動執行該視窗上的一個按鍵功能。
      這按鍵實際上就是在產生每個生字卡的畫面截圖,並將其儲存為個別的檔案。
      因為每個生字卡的內容一定不同,所以,系統就要控制到每張生字卡的內容要正確呈現後,才能做畫面截圖與存檔的動作。

      起初,以為將執行按鍵的動作放在 Form_Load 事件中就可,那知道 錯了!!

      經過網路爬文後,才知道一些答案。

      最後是將執行按鍵動作放在 Form_Shown 事件中,才解決問題。

      private void Form1_Shown(object sender, EventArgs e)
      {

          // button1_Click 帶入兩個 Null 參數,否則會有 button1_Click Overload 的錯誤
          this.button1_Click(null, null);       
      }

      在爬文的過程中,發現到高手提供範例程式,真是厲害。

      image

       

      網路資源:

      自動關閉 MessageBox 訊息視窗

      近來遇見【自動關閉 MessageBox 訊息視窗】的需求,搜尋網路後才得知,C# 的環境下並沒有提供這類功能,需要借助 Windows API 才可以。

      運作原理:使用 FindWindow 找到 MessageBox,再以 PostMessage 來關閉 MessageBox。

      在 Window Form 的架構下,需注意下列事項:

      • using System.Runtime.InteropServices;
        // 因應 Windows API 的使用
      • 引用 API
        [DllImport("user32.dll", EntryPoint = "FindWindow", CharSet = CharSet.Auto)]
        private extern static IntPtr FindWindow(string lpClassName, string lpWindowName);

        [DllImport("user32.dll", CharSet = CharSet.Auto)]
        public static extern int PostMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);

      • 設定計時器 Timer 控件,用以控制視窗的停滯時間
      • 定義常數變量
        public const int WM_CLOSE = 0x10;
      • 程式碼
        private void button1_Click(object sender, EventArgs e)
        {
            StartKiller(3000);
            MessageBox.Show("3秒後自動關閉MessageBox視窗", "MessageBox");
        }

        private void StartKiller(int pMuSecond)
        {
            Timer timer = new Timer();
            timer.Interval = pMuSecond;    
            timer.Tick += new EventHandler(Timer_Tick);
            timer.Start();
        }

        private void Timer_Tick(object sender, EventArgs e)
        {
            KillMessageBox();

            ((Timer)sender).Stop();     //停止Timer
        }

        private void KillMessageBox()
        {
            //依MessageBox的標題,找出MessageBox的視窗
            IntPtr ptr = FindWindow(null, "MessageBox");
            if (ptr != IntPtr.Zero)
            {
                //找到,則關閉MessageBox視窗
                PostMessage(ptr, WM_CLOSE, IntPtr.Zero, IntPtr.Zero);
            }
        }

      網路資源:http://www.dotblogs.com.tw/puma/archive/2009/02/06/7060.aspx  [C#]定時自動關閉MessageBox視窗小技巧

      信望愛聖經網站:Open Source, API

      享譽全球的【信望愛聖經網站】,旗下的技術組負責人 - 蔡哲民,於 2015/10/05 第一屆基督徒網路應用研討會上表示,【信望愛聖經網站】是一個 Open Source 的中文聖經網站。

      該網站中介紹的資料有:經文、經文原文編號加插、原文字典、字彙分析、主題查經、註釋資料及原文解經。

      此外,為便於資料的互換與應用,該網站平台也提供有 API 界面。

      Google API & VS.NET C# @2013 - 05

      接續【 Google API & VS.NET C# @2013 – 04 】之後,讓我們一起學習如何將一個影音檔案上傳到 YouTube 裡。

       

      程式中的運作細節,主要牽涉到兩個關鍵議題:

      1. 使用 YouTube APIs 功能,該如何在 Project 中加入 Reference:NuGet Packages ?
        (可參考:Google API & VS.NET C# @2013 – 01 一文)
      2. 如何在 Google Developers Console ,建立好程式中會使用到的 OAuth 2.0 認證資料,並儲存成 client_secrets.json 檔案。
        (可參考:Google API & VS.NET C# @2013 – 03 一文)


      另外,需注意的是 client_secrets.json 檔案要存放在 *.exe 的相同目錄之下。( Exp - D:\CreatePlaylist\CreatePlaylist\bin\Release )
      當然,讀者對 VS.NET、C# 的使用,要有一定基本的知識。

      本文將會附上範例程式【點選下載】,
      讀者只要處理好關鍵議題2(建置 client_secrets.json 檔案),即可讓程式正常運作。

      若是,讀者想自行建置專案,來測試程式的運作,在 NuGet Packages 的處理中,需要搜尋
      Google.Apis.YouTube.v3
      Google.Apis.Discovery
      ,並 Install 即可。


      client_secrets.json 檔案的內容、格式如下:

      {
          "installed":{
              "auth_uri":"https://accounts.google.com/o/oauth2/auth",
              "client_secret":"***************",
              "token_uri":"https://accounts.google.com/o/oauth2/token",
              "client_email":"",
              "redirect_uris":["urn:ietf:wg:oauth:2.0:oob","oob"],
              "client_x509_cert_url":"",
              "client_id":"***************************.apps.googleusercontent.com",
              "auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs"
          }
      }

      檔案資料中的 client_id、client_secret ,請讀者自行修改成自己的 OAuth 2.0 認證資料。

      範例程式:UploadVideo
                        將一個影音檔案上傳到 YouTube 中。

       

      程式運行過程,會顯示下列訊息:

      YouTube Data API: Upload Video
      ==============================
      10485760 bytes sent.
      20971520 bytes sent.
      31457280 bytes sent.
      41943040 bytes sent.
      52428800 bytes sent.
      62914560 bytes sent.
      73400320 bytes sent.
      Video id 'lD2S412qiyU' was successfully uploaded.
      Press any key to continue...


      lD2S412qiyU 就是被上傳的影音檔案代號。

      我們可以用

      1. http://www.youtube.com/watch?v=影音檔案代號
      2. http://youtu.be/影音檔案代號 

      來檢驗。

      Google API & VS.NET C# @2013 – 03

      在 Google API & VS.NET C# @2013 系列介紹文章中,本章將會是最重要的關鍵!

      它主要在介紹如何產生 OAuth 2.0 的認證檔案,與過程中一些處理事項的概念說明。
      至於 OAuth 2.0 的運作架構與理論,請讀者資料參考其他文件資料。


      在 Google API & VS.NET C# @2013 – 02 中,有提及到

      ★設定

          在你使用 Google APIs 之前,需要完全下列事項:

      1. 需要有 Google 帳號。沒有者,請先註冊。
      2. 需要有管理 Google Project 的經驗;諸如,建置 Project、管理 Project 等經驗。沒有者,請先連接到 Google Developers Console。
      3. 要將 NuGet packages 安裝在你開發的程式專案中。(Google API & VS.NET C# @2013 – 01 一文,已提及相關操作細節。)


      當你已經擁有 Google 帳號後,就可以 連接到 Google Developers Console。
      PS:Google Developers Console 目前有新、舊版本網頁的區別,所以產生 OAuth 2.0 認證的步驟,也就不同。本文以新版為主。
              舊版網址:https://code.google.com/apis/console/b/0/?noredirect#project:××××××××××××:overview
                                 ×××××××××××× 表示要設定 OAuth 2.0 認證的 Project No (專案編號)

      連線到 Google Developers Console,主要的工作就是管理專案。若有需要,也可以建置新的專案。

      image


      每個專案都會有 專案名稱、專案ID、專案編號。

      當你在匯總畫面中,點選你要處理的專案項目後,就會進入該專案的細部資料網頁。

      image


      接下來,我們直接點選左側的 憑證。
      可以看到有兩種憑證種類:OAuth 2.0, 公開API存取。
      image   image


      OAuth 2.0 有可分成三種:網路應用程式、服務帳戶、已安裝的應用程式。

      image


      因為,我們是用 VS.NET環境來開發 Console Application,所以要選用已安裝的應用程式。

      上述三種 OAuth 2.0 類型的認證資料,產生的內容也會不同不同!
      請記得 點選有 JSON 字樣的按鈕,以便產生認證資料檔案 client_secrets.json。


      以下圖示分別展示出三種應用程式類型,產生認證資料檔案 client_secrets.json的過程。

      一、網路應用程式

      image


      二、服務帳戶

      image


      三、已安裝的應用程式

      image


      PS:三種不同類型的 OAuth 2.0 認證檔案,可以在該檔案內容中找到相對的關係字元
      • 網路應用程式:"web"
      • 服務帳戶:"type": "service_account"
      • 已安裝的應用程式:"installed"

      Google API & VS.NET C# @2013 - 04

      本文將提到如何在 YouTube 環境中,建立一個新的播放清單,並指定一個事先已上傳到 YouTube 影片,歸類給該播放清單。

      程式中的運作細節,主要牽涉到兩個關鍵議題:

      1. 使用 YouTube APIs 功能,該如何在 Project 中加入 Reference:NuGet Packages ?
        (可參考:Google API & VS.NET C# @2013 – 01 一文)
      2. 如何在 Google Developers Console ,建立好程式中會使用到的 OAuth 2.0 認證資料,並儲存成 client_secrets.json 檔案。
        (可參考:Google API & VS.NET C# @2013 – 03 一文)


      另外,需注意的是 client_secrets.json 檔案要存放在 *.exe 的相同目錄之下。( Exp - D:\CreatePlaylist\CreatePlaylist\bin\Release )
      當然,讀者對 VS.NET、C# 的使用,就需要有一定的基本使用常識。

      本文將會附上範例程式【點選下載】,
      讀者只要處理好關鍵議題2(建置 client_secrets.json 檔案),即可讓程式正常運作。

      若是,讀者想自行建置專案,來測試程式的運作,在 NuGet Packages 的處理中,只要搜尋 Google.Apis.YouTube.v3,並 Install 即可。


      client_secrets.json 檔案的內容、格式如下:

      {
          "installed":{
              "auth_uri":"https://accounts.google.com/o/oauth2/auth",
              "client_secret":"***************",
              "token_uri":"https://accounts.google.com/o/oauth2/token",
              "client_email":"",
              "redirect_uris":["urn:ietf:wg:oauth:2.0:oob","oob"],
              "client_x509_cert_url":"",
              "client_id":"***************************.apps.googleusercontent.com",
              "auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs"
          }
      }

      檔案資料中的 client_id、client_secret ,請讀者自行修改成自己的 OAuth 2.0 認證資料。

      範例程式:CreatePlaylist
                        建立一個新的播放清單,並指定一個事先已上傳到 YouTube 影片,歸類給該新建的播放清單。

      以下是程式運行時,產生的畫面圖示。

      ★筆者因為有多個帳號,所以認證時出現 需選取帳號 的畫面。

      image


      ★授權提示畫面

      image


      ★操作結果

      image

      程式碼 newPlaylistItem.Snippet.ResourceId.VideoId = "GNRMeaz6QRI";

      GNRMeaz6QRI 是一個事先已上傳到 YouTube 影片,你可以藉由 youtu.be/GNRMeaz6QRI 觀看到該影片內容。

      而操作訊息中 PLsNJO0nl_IhQU-3qQ0qxClYkOIwjnCg10,就是新產生的播放清單代號。
      你可以藉由 https://www.youtube.com/playlist?list=PLsNJO0nl_IhQU-3qQ0qxClYkOIwjnCg10 觀看其效果。

      image

      Google API & VS.NET C# @2013 - 02

      之前 Google API & VS.NET C# @2013 – 01 一文,介紹使用 Discovery.ListAPIs 功能的範例,好誇入 Google API 的殿堂之門。

      希望,經由逐步的操作,讓讀者還在不清楚 Google APIs 的整個運作架構下,就可以看到它的功效。

      接下來,就來介紹 Google APIs 的簡易入門:Google APIs Client Library for .NET - Getting Started

      ( 建議讀者也一併參考 Google APIs Client Library for .NET )

      該文章中提到幾個主要項目:

      1. Setup 設定
      2. Authentication and authorization 認證與授權
      3. Examples 範例演示
      4. Finding information about the APIs 尋找 APIs 的相關資訊


      ★設定

          在你使用 Google APIs 之前,需要完全下列事項:

      1. 需要有 Google 帳號。沒有者,請先註冊。
      2. 需要有管理 Google Project 的經驗;諸如,建置 Project、管理 Project 等經驗。沒有者,請先連接到 Google Developers Console。
      3. 要將 NuGet packages 安裝在你開發的程式專案中。(Google API & VS.NET C# @2013 – 01 一文,已提及相關操作細節。)


      ★認證與授權

          這方面共有兩類:

      • Simple API access (API keys)
        這類型的API調用,是無法訪問任何用戶的私人數據。應用程式主要是對自身進行驗證,以確認該程式為你的 Google Developers Console 的應用程式。
      • Authorized API access (OAuth 2.0)
        這類型的API調用,就會調用到一些用戶的私人數據。
        首先,應用程式必須先進行身份認證,而且用戶也必須授權你的應用程序可以訪問他的私人數據。而所有這一切需求,都是藉由 OAuth 2.0 來完成。
        • Scope:只讀、讀與寫
        • Refresh and access tokens:在授權許可有效的期限中,你的應用程式可以藉由 access token 來取得 APIs 呼叫的授權。
        • Client ID and client secret:

          有三種類型的用戶 IDs (client IDs):
          • Web application
          • Installed application
          • Service Account


      ★範例演示

         請自行研讀


      ★尋找 APIs 的相關資訊
          Google APIs Client Library for .NET

      Google API & VS.NET C# @2013 - 01

      Google 的環境,相信已經有很多朋友在使用;但有在使用 Google API 的人可能就會少很多,也許連這名詞多沒聽說過呢!

      會想使用 Google API 的功能,主要是因為個人有在 YouTube 上建置不少的播放清單,並且也將相關的資料建置成資料庫。希望可以將資料庫的內容,以程式控管方式來自動建立好一個一個獨立的播放清單。當然,這種想法若是行得通,那麼個人日常在使用的 Gmail、Google+、Calendar..等功能,就可以修正成更多不一樣的應用了。

      於是,上網 google 一番找到不少資料,也有一些範例可供參考。不過實際動手做時,才發現到有不少問題存在。為此,才著筆記錄之。

      首先,建置一個不需要 Google 認證的範例 (Discovery.ListAPIs),好誇入 Google API 的大殿堂。

      步驟:

      1. 開啟 Visual Studio 2013
      2. 建置新專案:C# / Console Application
      3. 複製 範例程式碼 到專案中,並取代原有的 Program.cs 內容 [ 下載範例 ]
        務必記得,將範例程式中的 【ApiKey 值】,更換成你個人的【ApiKey 值】。
      4. 加入 Reference:NuGet Packages
      5. 建置程式(Build)


      圖示:步驟 1, 2

      image


      圖示:步驟 3
      (注意,程式碼區域右方的捲動軸上,有兩個紅色線段,這是因為此專案還未引入 Reference)
      image


      因為程式中 image 使用 Google API 的功能,所以一定要引用相關地 Library.進入專案中;
      否則,程式無法正常運作。
      這樣的過程,就被稱為【NuGet Packages 引入】。


      【NuGet Packages 引入】的方法有二:

      方法一:

      image


      方法二:

      image


      搜尋所需要的 Library:例如【Google.Apis.Discovery】

      image

      image

      imageimage

      image

      圖示:步驟 5

      image

      補註:範例程式中,有使用到 BaseClientService 功能,所以要加入 using Google.Apis.Services; 指令,否則執行時會報錯!

      複製專案成新專案 (Visual Studio 2012)

      實務工作中,常需要以某個舊專案為基礎,來生成新的專案內容。此時,採用複製舊有專案成新專案的方式,是個不錯的選項。


      相關的處理步驟,如下:

      1. 複製舊有專案所在之文件夾,以建制成新的文件夾。如 Ch03_00 => Ch03_003
      2. 修改專案檔名及文件夾名稱。
        image      image
      3. 修改專案檔的內容。( ** 只改 文件夾 的名稱 )
        image
      4. 點擊專案檔名,並開啟此一新專案。
      5. 在 Solution Explorer 中,首先修改 專案名稱。
        image
      6. 修改專案的內容。Assembly name, Default namespace
        image
      7. 一次性修正整個專案的特定文字字串。
        image
      8. 刪除專案 bin 目錄中 的舊有專案的檔案。
        image
      9. 若是該專案具有資料庫的功能,記得要修正資料庫的檔案名稱。
        * 在專案文件夾下 Ch03_003\App_Data
        原有檔名:
        aspnet-Ch03_00-20141030232110.mdf
        aspnet-Ch03_00-20141030232110_log.ldf
      10. 修正後的檔名:
        aspnet-Ch03_003-20141030232110.mdf
        aspnet-Ch03_003-20141030232110_log.ldf


      ** 項次8,一定要處理。否則會有執行錯誤。
      Multiple types were found that match the controller named 'Home'. This can happen if the route that services this request ('{controller}/{action}/{id}') does not specify namespaces to search for a controller that matches the request. If this is the case, register this route by calling an overload of the 'MapRoute' method that takes a 'namespaces' parameter.


      The request for 'Home' has found the following matching controllers:
      Ch03_00.Controllers.HomeController
      Ch03_003.Controllers.HomeController

      解除 NuGet 錯誤,@ Visual Studio 2012

      當安裝好 Visual Studio 2012 後,第一次創建 Web 專案,無論是 ASP.NET Win Form 或是 ASP.NET MVC,都會產生運行錯誤:

      "Error: this template attempted to load component assembly 'NuGet.VisualStudio.Interop, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.".

       

      要解除這個問題,可以下列步驟進行:

      1. 啟動 Visual studio 2012,點選 Tools -> Extension & Updates
      2. 選取 Online

        image

      3. 選取清單中的 NuGet Package Manager,並按下 Download。
      4. 下載完成後,系統會詢問是否要安裝 VSIXInstall.exe,請執行安裝。
      5. 重啟 Visual studio 2012。

      傳遞URL 到網頁元件,並取得連線結果的返回值

      傳遞URL 到網頁元件,並取得連線結果的返回值

      在實務工作中,因有需要將特定字元組合而成的URL,傳送到internet。並得知其運作結果,以做下一階段的作業。
      (這動作就像使用滑鼠,點選一個具超連結的網址後,看它運行的結果。)

      當然,運行結果可能有 可以正常執行,看到相關網頁的內容;也可能是 找不到網頁 (Error 404)

      若是在 .NET 環境中,則可以使用 HttpWebRequest 來處理。
      當網頁找不到時,則會得到下列錯誤訊息的回傳字串:"遠端伺服器傳回一個錯誤: (404) 找不到。"

      程式碼撰寫前中,要引用 System.Net;

      接著寫個函數,以便在程式中叫用。
      private string CallMsgCenterToSendMsgGet(string Url)
      {
          try
          {   
                  CookieContainer cookieContainer = new CookieContainer();

                  string formUrl = Url;

                  HttpWebRequest request = WebRequest.Create(formUrl) as HttpWebRequest;

                  request.Method = "GET";
                  request.KeepAlive = false;
                  request.AllowAutoRedirect = true;
                  request.ContentType = "application/x-www-form-urlencoded";
                  request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)";
                  request.CookieContainer = cookieContainer;

                  HttpWebResponse SendSMSResponse = (HttpWebResponse)request.GetResponse(); 
                  StreamReader SendSMSResponseStream = new StreamReader(SendSMSResponse.GetResponseStream());

                  string strRespone = SendSMSResponseStream.ReadToEnd(); 
                  SendSMSResponse.Close();
                  SendSMSResponseStream.Close();
                  return strRespone;
          }
          catch (WebException we)
          {
              string msg = we.Message;
              return msg;
          }
      }

      雙引號 quotation marks 的使用及範例

      雙引號 " (quotation marks) 在 C# 的表示方式,共有三種:

      • [ \" ]
      • [ '\u0022' ]
      • [ string strQuote = "\""; ]

      使用時,任選一種使用即可。

      下列是各種用法的範例:
      // [ \" ]
      result = Process.Start("\"C:\\Program Files\\7-Zip\\7z.exe\"", " a -t" + strZipType + " " + pZipName + " " + pFilename);

      // [ '\u0022' ]
      result = Process.Start('\u0022' + @"C:\Program Files\7-Zip\7z.exe" + '\u0022', " a -t" + strZipType + " " + pZipName + " " + pFileName);

      // [ string strQuote = "\""; ]
      // 先定義字串變數 Quote
      result = Process.Start(strQuote + @"C:\Program Files\7-Zip\7z.exe" + strQuote , " a -t" + strZipType + " " + pZipName + " " + pFilename);

      使用C# .NET Framework 程式設計前的基礎知識

      一、物件導向的原則

      • 封裝 (Encapsulation)
      • 繼承 (Inheritance)
      • 多型 (Polymorphism)

      所有的變數和方法,包括 Main 方法,也就是應用程式的進入點 (Entry Point),都封裝在類別定義之內。
      類別可能直接從一個父類別繼承,不過可以實作任何數目的介面。覆寫父類別中之虛擬方法的方法,都需要用 override 關鍵字做為避免意外重新定義的方式。
      在 C# 中,結構 (Struct) 就像輕量的類別;是一種能夠實作介面,卻不支援繼承的堆疊配置型別。

      二、C# 如何運行?

      從 C# 原始程式碼到電腦執行
      圖片來源:http://msdn.microsoft.com/zh-tw/library/z1zx9t92(v=vs.80).aspx

      指標的迷失問題?

      函式指標     Pointer to Function
      ( * f ) ()        指向函式位址的指標

      指標函式     Pointer Function
      * f ()           傳回指標值的函式
      * ( f () )

      陣列指標     Pointer to Array
      ( * f ) []         指向陣列位址的指標

      指標陣列     Pointer Array
      * f []            存放指標元素的陣列

      創建 "Visual Studio 2010 Command Prompt"批次捷徑

      使用 Visual Studio 2010 Express :
      不要在存放 vsvars32.bat 的目錄中,直接執行 vsvars32.bat.

      要在命令行下,才執行 vsvars32.bat.

      可以創建 "Visual Studio 2010 Command Prompt"批次捷徑,方便日後使用,
      其內容如下:
      %comspec% /k ""D:\Program Files\Microsoft Visual Studio 10.0\Common7\Tools\vsvars32.bat"" x86

      參考資料:
      "Visual Studio 2005 Command Prompt"
      %comspec% /k ""C:\Program Files\Microsoft Visual Studio 8\VC\vcvarsall.bat"" x86

      C/C++ 編譯器選項

      HelloWorld.cpp 編譯的方式
      • cl HelloWorld.cpp            => 會有額外的錯誤訊息
      • cl /EHsc HelloWorld.cpp  => 可避免產生額外的錯誤訊息
      • cl /clr HelloWorld.cpp

      cl 編譯器的選項,可參考相關文件