深入淺出 C# 4/e 第十章 讀取與寫入檔案 心得分享


分類

建立時間: 2022年12月1日 13:00
更新時間: 2022年12月8日 21:10

心得

此心得包含第十章、附錄1 第十章(Github PDF)、Unity 實驗室 #5 Raycasting

第十章書本內容心得

這個章節除了教你如何讀取和寫入檔案以外,還有取得檔案資訊、取得目錄清單,包含大量的範例讓你了解資料流的運用。

另一個部分是資料序列化,此為將資料序列化成 JSON 格式,我曾在 PHP 和 Javascript 溝通時常用這種格式作為資料傳遞,一方面是在 PHP 以及 Javascript 有關 JSON 的功能相當齊全,另一方面是這種格式很常見,大部分的人都懂的使用。

最後一個部分是探討字元編碼 binary byte hex…,這部分比較底層我就不再細說。

附錄1 第十章心得

跟之前一樣,這是更大型練習專案,雖然只有幾個類別,但裡面的程式碼不少,最後會做出一個躲貓貓的遊戲,而且也是以測試驅動開發的方式教學,但這次會比上次難一點,提示更少,讀者需要思考更多問題才能完成練習,這個練習只有在最後的部分才會用到檔案讀寫,其他9成的內容都在做躲貓貓遊戲的專案,礙於時間不足的關係,Part3 我直接看答案,最後 Get creative! 練習我就放棄了。

Unity 實驗室 #5 Raycasting 心得

在這個部分,書中提到 Unity AI 角色導航功能,只需簡單設定就能讓指定的物件移動到滑鼠點擊的位置,關於這個部分我會另外寫一篇文章來說明此功能。

書中提及的類別

書中提及的類別有很多個,我紀錄幾個比較可能會用到的類別,方便之後參考。

Stream

Stream 是抽象類別,它也是所有資料流的父類別

FileStream

可以對著檔案進行讀取和寫入,為了方便在檔案讀寫時會使用 StreamWriter 和 StreamReader 類別來管理 FileStream。

StreamWriter

用來寫入檔案的類別

StreamReader

用來讀取檔案的類別

File

File 類別有很多靜態方法,用來處理檔案。

舉例如下

File.Exists()
File.WriteAllText()
File.Encrypt()
File.Copy()
File.SetLastWriteTime()
File.Delete()

FileInfo

類似 File 類別,但需要實例化。

Directory

管理目錄的類別,跟 File 一樣有很多靜態方法。

MemoryStream

可以對著記憶體讀取或寫入資料,用來將資料流儲存在記憶體的類別。

using 陳述式

如果類別有實作 IDisposable 介面,例如資料流,裡面有一個 Dispose() 用來釋放資源,使用 using 陳述式可以讓資料流自動呼叫 Dispose() 方法,避免忘記釋放資源。

using System.Text;

using (var ms = new MemoryStream())
{
    using (var sw = new StreamWriter(ms))
    {
        sw.WriteLine("The value is {0:0.00}", 123.45678);
    }
    Console.WriteLine(Encoding.UTF8.GetString(ms.ToArray()));
}

沒有 Main 方法取得 args

如果你的專案 Program.cs 跟我一樣是沒有 Main 方法的程式,書中的範例是有在 Main 方法中使用 args,以下補充如何在沒有 Main 方法取得 args

Program.cs

// 略
using (Stream input = File.OpenRead(args[0]))
{
    // 略
}
// 略

直接用 args 變數就行了

靜態類別的建構子

剛好在附錄一有練習到就紀錄一下

public static class House
{
    /// <summary>
    /// Sets up the house data structure
    /// </summary>
    static House()
    {
    }
}

參考

觀看次數: 712
c#lambdalinqtestunitvar查詢心得單元測試深入淺出
按讚追蹤 Enjoy 軟體 Facebook 粉絲專頁
每週分享資訊技術

一杯咖啡的力量,勝過千言萬語的感謝。

支持我一杯咖啡,讓我繼續創作優質內容,與您分享更多知識與樂趣!