跳過到頁腳內容
Iron Academy Logo
學習 C#
學習 C#

其他分類

C# 讀取和寫入文件

Tim Corey
24m 34s

在C#中,檔案輸入和輸出 (I/O) 操作是許多軟體應用程式的重要部分,允許開發者有效地讀取和寫入檔案。 無論您是在儲存數據、記錄應用程式事件,還是處理大量文本或二進位數據,C#都提供了強大的工具來處理檔案。 在Tim Corey的影片"C# Data Access: Text Files"中,他詳細演示這些檔案操作,重點介紹如何使用文本檔案進行數據存儲和檢索。 本文旨在總結Tim在影片中所涉及的關鍵概念和技術,為您提供C#檔案I/O操作的實用見解。

介紹

在C#中,檔案輸入和輸出操作對於讀取和寫入文本檔案是必不可少的。 File類別提供了靜態方法來與現有檔案互動或創建新檔案。 StreamWriter通常用於讀寫檔案。 StreamReader逐行讀取檔案,允許您訪問每一行文本或字符串陣列。 您也可以使用while循環有效地讀取較大的檔案。 StreamWriter類別用於將數據寫入檔案,支援寫入字符串和陣列。 它可以用於附加文本到現有檔案或覆蓋整個檔案。像WriteText這樣的方法允許在文本檔案內進行簡單的數據操作。

這些操作通常在static void Main方法中進行,您可以在那裡定義檔案路徑。 例如,您可以指定一個檔案名並使用StreamWriter寫入單個字符串或整個字符串陣列。 using語句確保檔案操作後正確關閉,防止資源洩漏。 StreamReader也可以用來逐行讀取檔案,並可以處理例外以處理檔案不存在或無法訪問時的潛在錯誤。 這些檔案I/O功能使C#成為有效和高效處理檔案的絕佳選擇。

Tim首先介紹了在C#中從文本檔案中讀取和寫入的簡單性。 他展示了如何通過幾行代碼完成這些任務,使文本檔案成為一個可行的數據存儲選項。

建立一個示範控制台應用程式

Tim從使用Visual Studio創建一個名為"TextFileDataAccessDemo"的新控制台應用程式開始。

using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;

namespace TextFileDataAccessDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.ReadLine(); // Keeps the console window open to view the output
        }
    }
}
using System;
using System.IO;
using System.Collections.Generic;
using System.Linq;

namespace TextFileDataAccessDemo
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.ReadLine(); // Keeps the console window open to view the output
        }
    }
}

他解釋了使用Console.ReadLine來保持控制台窗口打開,讓使用者可以看到輸出。

從文本檔案中讀取

Tim示範如何使用File.ReadAllLines方法從文本檔案中讀取。 他展示了如何處理檔案路徑並使用字符串文字來避免逃脫字符。

string filePath = @"C:\demos\test.txt";
List<string> lines = File.ReadAllLines(filePath).ToList();
string filePath = @"C:\demos\test.txt";
List<string> lines = File.ReadAllLines(filePath).ToList();

File.ReadAllLines方法從指定檔案中讀取所有行並將其返回為字符串陣列。 Tim將此陣列轉換為清單以便於操作。

寫入文本檔案

Tim解釋如何使用File.WriteAllLines方法將數據寫入文本檔案。 他展示了如何將新行添加到清單中,然後將更新後的清單寫回檔案。

lines.Add("Sue,Storm,WWIStorm.com");
File.WriteAllLines(filePath, lines);
lines.Add("Sue,Storm,WWIStorm.com");
File.WriteAllLines(filePath, lines);

這段代碼在清單中添加新條目並將整個清單寫回檔案。

創建數據模型並從檔案填充

Tim創建了一個Person類別來表示文本檔案中每個條目的數據結構。

public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string URL { get; set; }
}
public class Person
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string URL { get; set; }
}

然後他讀取檔案並填充Person物件的清單。

List<Person> people = new List<Person>();
List<string> lines = File.ReadAllLines(filePath).ToList();

foreach (string line in lines)
{
    string[] entries = line.Split(',');
    Person newPerson = new Person
    {
        FirstName = entries[0],
        LastName = entries[1],
        URL = entries[2]
    };
    people.Add(newPerson);
}
List<Person> people = new List<Person>();
List<string> lines = File.ReadAllLines(filePath).ToList();

foreach (string line in lines)
{
    string[] entries = line.Split(',');
    Person newPerson = new Person
    {
        FirstName = entries[0],
        LastName = entries[1],
        URL = entries[2]
    };
    people.Add(newPerson);
}

這段代碼讀取每一行,通過逗號分隔,並用提取的數據創建一個Person物件。

字符串插值

Tim介紹了C# 6.0中的字符串插值功能,它簡化了將變量和字符串結合的過程。 此方法在字符串之前使用{}來直接嵌入變量於字符串中。

foreach (var person in people)
{
    Console.WriteLine($"{person.FirstName} {person.LastName}: {person.URL}");
}
foreach (var person in people)
{
    Console.WriteLine($"{person.FirstName} {person.LastName}: {person.URL}");
}

與使用+運算子的傳統串聯方式相比,這種語法更簡潔並且更高效。

C# 讀寫文件

數據驗證

Tim強調了從文本檔案中讀取時驗證數據的重要性。他指出假設數據結構的風險,並建議檢查分隔條目的長度。

foreach (string line in lines)
{
    string[] entries = line.Split(',');
    if (entries.Length == 3)
    {
        Person newPerson = new Person
        {
            FirstName = entries[0],
            LastName = entries[1],
            URL = entries[2]
        };
        people.Add(newPerson);
    }
    else
    {
        // Handle error
        Console.WriteLine("Invalid data format.");
    }
}
foreach (string line in lines)
{
    string[] entries = line.Split(',');
    if (entries.Length == 3)
    {
        Person newPerson = new Person
        {
            FirstName = entries[0],
            LastName = entries[1],
            URL = entries[2]
        };
        people.Add(newPerson);
    }
    else
    {
        // Handle error
        Console.WriteLine("Invalid data format.");
    }
}

這可以確保只有具有正確條目數的行被處理,避免潛在的運行時錯誤。

將物件添加到清單

Tim演示如何將新的物件添加到清單中。他使用Person類別的匿名實例將新的人員添加到清單中。

people.Add(new Person { FirstName = "Greg", LastName = "Jones", URL = "WOWT.com" });
people.Add(new Person { FirstName = "Greg", LastName = "Jones", URL = "WOWT.com" });

這創建並初始化了一個新的people清單中。

將數據寫回文本檔案

Tim解釋如何將Person物件清單轉換為字符串清單,其中每個字符串代表檔案中的一行。

List<string> output = new List<string>();
foreach (var person in people)
{
    output.Add($"{person.FirstName},{person.LastName},{person.URL}");
}
File.WriteAllLines(filePath, output);
List<string> output = new List<string>();
foreach (var person in people)
{
    output.Add($"{person.FirstName},{person.LastName},{person.URL}");
}
File.WriteAllLines(filePath, output);

這段代碼遍歷Person物件創建一個CSV字符串,並將字符串清單寫入檔案。

結論

Tim Corey的C#檔案I/O操作詳細指南提供了有關從文本檔案中讀取和寫入的實用見解。 通過遵循他的示例,開發者可以有效管理使用文本檔案的數據,並實現穩健的數據存儲解決方案。 為了深入了解和實踐學習體驗,我強烈建議您觀看Tim Corey的影片,他在影片中深入探討了這些概念,並給出了實際應用的例子。

Hero Worlddot related to C# 讀取和寫入文件
Hero Affiliate related to C# 讀取和寫入文件

通過分享您所愛的東西賺得更多

您是否在為使用.NET、C#、Java、Python或Node.js的開發者創建內容?將您的專業知識轉化為額外收入!

鋼鐵支援團隊

我們每週 5 天,每天 24 小時在線上。
聊天
電子郵件
打電話給我