C# 讀取和寫入文件
在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}");
}
與使用+運算子的傳統串聯方式相比,這種語法更簡潔並且更高效。

數據驗證
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的影片,他在影片中深入探討了這些概念,並給出了實際應用的例子。
