一、文件路徑及打開方式
在C#中讀取txt文件,首先需要確定文件路徑並確定文件的打開方式,這可以通過File類和StreamReader類實現。其中,File類支持對文件的讀寫操作,StreamReader類則提供了一些簡便的方法,使讀取文本文件變得簡單。
代碼示例:
string filePath = "C:\\data.txt";
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(fs, Encoding.UTF8);
二、按行讀取文件內容
讀取文本文件通常是按行讀取的,C#提供了多種方法可以輕鬆實現這一操作。在StreamReader類中,ReadLine()方法可讀取一行數據,如果讀到結尾則返回null。而File.ReadAllLines()方法則將整個文件讀取為一個字符串數組,每個數組元素為文件中的一行數據。
代碼示例:
string filePath = "C:\\data.txt";
string[] lines = File.ReadAllLines(filePath);
foreach (string line in lines)
{
Console.WriteLine(line);
}
三、按字符讀取文件內容
除了按行讀取文件外,有時候還需要按字符讀取文件。StreamReader類的Read()方法可讀取一個字符,ReadToEnd()方法則可一次性讀取整個文件。
代碼示例:
string filePath = "C:\\data.txt";
FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read);
StreamReader sr = new StreamReader(fs, Encoding.UTF8);
while (!sr.EndOfStream)
{
char c = (char)sr.Read();
Console.Write(c);
}
四、讀取csv文件
讀取csv文件是數據處理中常見的操作。csv文件是用逗號分隔的文本文件,每行表示一個記錄項,每個記錄項又由多個字段組成。C#中可通過Split()方法將一行數據按逗號分隔並提取其中的字段。
代碼示例:
string filePath = "C:\\data.csv";
string[] lines = File.ReadAllLines(filePath);
foreach (string line in lines)
{
string[] fields = line.Split(',');
foreach (string field in fields)
{
Console.Write(field + " ");
}
Console.Write("\n");
}
五、讀取大文件
對於大文件,C#中的傳統讀取方式會導致內存消耗過大,甚至超出操作系統對進程內存的限制。為了避免這種情況,可以使用MemoryMappedFile類來讀取大文件。該類會將文件的一部分映射到內存中,一旦讀取完成就自動釋放內存,從而避免內存消耗過大。
代碼示例:
string filePath = "C:\\bigData.txt";
using (var mmf = MemoryMappedFile.CreateFromFile(filePath))
{
using (var stream = mmf.CreateViewStream())
{
using (var reader = new StreamReader(stream))
{
while (!reader.EndOfStream)
{
string line = reader.ReadLine();
Console.WriteLine(line);
}
}
}
}
六、讀取加密文件
在實際操作中,有時需要讀取加密文件並對其進行解密。可以使用C#中的加密類庫和文件流實現對加密文件的讀取。
代碼示例:
string filePath = "C:\\encryptedData.txt";
AesCryptoServiceProvider aes = new AesCryptoServiceProvider();
aes.Key = Encoding.UTF8.GetBytes("testkey123456789");
aes.IV = Encoding.UTF8.GetBytes("testiv123456789");
using (FileStream fs = new FileStream(filePath, FileMode.Open))
{
using (CryptoStream cs = new CryptoStream(fs, aes.CreateDecryptor(), CryptoStreamMode.Read))
{
using (StreamReader reader = new StreamReader(cs))
{
string line;
while ((line = reader.ReadLine()) != null)
{
Console.WriteLine(line);
}
}
}
}
原創文章,作者:IAUIC,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/332600.html