您的位置:

C#读取txt文件数据详解

一、文件路径及打开方式

在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);
            }
        }
    }
}