一、文件路径及打开方式
在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);
}
}
}
}