跳转到内容

C Sharp 文本文件

来自代码酷

C#文本文件处理[编辑 | 编辑源代码]

文本文件处理是C#编程中常见的操作,用于读取、写入和操作纯文本文件(如.txt、.csv等)。本指南将详细介绍C#中处理文本文件的核心类、方法和最佳实践。

核心类概述[编辑 | 编辑源代码]

C#通过System.IO命名空间提供文本文件处理功能,主要类包括:

  • File:提供静态方法用于文件操作
  • StreamReader:用于读取文本文件
  • StreamWriter:用于写入文本文件
  • FileStream:提供文件流操作

classDiagram class File{ +Exists(string path) bool +ReadAllText(string path) string +WriteAllText(string path, string contents) void } class StreamReader{ +ReadLine() string +ReadToEnd() string +Close() void } class StreamWriter{ +Write(string value) void +WriteLine(string value) void +Close() void } class FileStream{ +Read(byte[] array, int offset, int count) int +Write(byte[] array, int offset, int count) void }

基本文件操作[编辑 | 编辑源代码]

读取文本文件[编辑 | 编辑源代码]

使用File.ReadAllText()简单读取整个文件:

string filePath = @"C:\example\test.txt";
string content = File.ReadAllText(filePath);
Console.WriteLine(content);

输出示例

这是文本文件的第一行
这是第二行
文件结束

逐行读取[编辑 | 编辑源代码]

对于大文件,使用StreamReader逐行读取更高效:

using (StreamReader reader = new StreamReader(filePath))
{
    string line;
    while ((line = reader.ReadLine()) != null)
    {
        Console.WriteLine(line);
    }
}

写入文本文件[编辑 | 编辑源代码]

简单写入[编辑 | 编辑源代码]

使用File.WriteAllText()写入整个文件:

string textToWrite = "这是要写入文件的新内容";
File.WriteAllText(filePath, textToWrite);

追加内容[编辑 | 编辑源代码]

使用StreamWriter追加内容:

using (StreamWriter writer = new StreamWriter(filePath, true)) // true表示追加模式
{
    writer.WriteLine("这是追加的新行");
}

高级文件操作[编辑 | 编辑源代码]

文件编码处理[编辑 | 编辑源代码]

指定编码方式(如UTF-8):

string content = File.ReadAllText(filePath, Encoding.UTF8);

异步文件操作[编辑 | 编辑源代码]

使用异步方法提高性能:

async Task<string> ReadFileAsync(string path)
{
    using (StreamReader reader = new StreamReader(path))
    {
        return await reader.ReadToEndAsync();
    }
}

实际应用案例[编辑 | 编辑源代码]

日志记录系统[编辑 | 编辑源代码]

实现简单的日志记录功能:

public class Logger
{
    private readonly string logFilePath;
    
    public Logger(string path)
    {
        logFilePath = path;
    }
    
    public void Log(string message)
    {
        string logEntry = $"{DateTime.Now:yyyy-MM-dd HH:mm:ss} - {message}";
        File.AppendAllText(logFilePath, logEntry + Environment.NewLine);
    }
}

CSV文件处理[编辑 | 编辑源代码]

解析CSV文件的简单实现:

public List<string[]> ReadCsv(string filePath)
{
    var data = new List<string[]>();
    
    using (var reader = new StreamReader(filePath))
    {
        while (!reader.EndOfStream)
        {
            var line = reader.ReadLine();
            var values = line.Split(',');
            data.Add(values);
        }
    }
    
    return data;
}

性能考虑[编辑 | 编辑源代码]

处理大文本文件时:

  • 使用StreamReader而非File.ReadAllText()
  • 考虑使用MemoryMappedFile处理超大文件
  • 异步操作可提高响应性

错误处理[编辑 | 编辑源代码]

始终包含异常处理:

try
{
    string content = File.ReadAllText("nonexistent.txt");
}
catch (FileNotFoundException ex)
{
    Console.WriteLine($"文件未找到: {ex.Message}");
}
catch (IOException ex)
{
    Console.WriteLine($"IO错误: {ex.Message}");
}

最佳实践[编辑 | 编辑源代码]

1. 始终使用using语句确保资源释放 2. 指定明确的文件编码 3. 对大文件使用流式处理 4. 考虑文件锁定问题 5. 验证文件路径和权限

数学表示[编辑 | 编辑源代码]

文件读取操作的时间复杂度可表示为: O(n) 其中n是文件大小,因为需要线性扫描整个文件。

总结[编辑 | 编辑源代码]

C#提供了强大的文本文件处理功能,从简单的File类静态方法到高级的流操作。选择适当的方法取决于具体需求:

  • 小文件:File.ReadAllText/WriteAllText
  • 大文件:StreamReader/StreamWriter
  • 高性能需求:异步方法或内存映射文件

掌握这些技术将使你能够高效地处理各种文本文件操作场景。