C#文件的读写多种方式

在C#中,文件读写有多种方法,我将为您详细介绍:

1. File类方法(最简单)

// 写入文件
File.WriteAllText("path.txt", "Hello World");
File.WriteAllLines("path.txt", new string[] {"Line1", "Line2"});

// 读取文件
string content = File.ReadAllText("path.txt");
string[] lines = File.ReadAllLines("path.txt");

2. StreamWriter和StreamReader

// 写入文件
using (StreamWriter writer = new StreamWriter("path.txt"))
{
    writer.WriteLine("Hello World");
}

// 读取文件
using (StreamReader reader = new StreamReader("path.txt"))
{
    string content = reader.ReadToEnd();
}

3. FileStream

// 写入文件
using (FileStream fs = new FileStream("path.txt", FileMode.Create))
{
    byte[] data = Encoding.UTF8.GetBytes("Hello World");
    fs.Write(data, 0, data.Length);
}

// 读取文件
using (FileStream fs = new FileStream("path.txt", FileMode.Open))
{
    byte[] buffer = new byte[fs.Length];
    fs.Read(buffer, 0, buffer.Length);
    string content = Encoding.UTF8.GetString(buffer);
}

4. 异步读写(推荐现代方式)

// 异步写入
public async Task WriteFileAsync()
{
    await File.WriteAllTextAsync("path.txt", "Hello Async");
}

// 异步读取
public async Task<string> ReadFileAsync()
{
    return await File.ReadAllTextAsync("path.txt");
}

5. BinaryWriter和BinaryReader(二进制文件)

// 写入二进制文件
using (BinaryWriter writer = new BinaryWriter(File.Open("data.bin", FileMode.Create)))
{
    writer.Write(123);
    writer.Write("Hello");
}

// 读取二进制文件
using (BinaryReader reader = new BinaryReader(File.Open("data.bin", FileMode.Open)))
{
    int number = reader.ReadInt32();
    string text = reader.ReadString();
}

6. Path类(文件路径操作)

// 文件路径相关操作
string fileName = Path.GetFileName("C:\\temp\\file.txt");
string extension = Path.GetExtension("file.txt");
string fullPath = Path.GetFullPath("file.txt");

推荐最佳实践

  1. 使用 using 语句管理资源
  2. 对于大文件,使用流式读写
  3. 异步方法处理大文件
  4. 添加异常处理
  5. 注意文件编码

完整示例

public class FileHelper
{
    // 安全的文件写入方法
    public void SafeWriteFile(string path, string content)
    {
        try
        {
            // 确保目录存在
            Directory.CreateDirectory(Path.GetDirectoryName(path));

            File.WriteAllText(path, content, Encoding.UTF8);
        }
        catch (Exception ex)
        {
            Console.WriteLine($"写入文件错误: {ex.Message}");
        }
    }

    // 安全的文件读取方法
    public string SafeReadFile(string path)
    {
        try
        {
            if (!File.Exists(path))
            {
                return null;
            }

            return File.ReadAllText(path, Encoding.UTF8);
        }
        catch (Exception ex)
        {
            Console.WriteLine($"读取文件错误: {ex.Message}");
            return null;
        }
    }
}

选择建议

  • 小文件:使用 File.WriteAllText/ReadAllText
  • 大文件:使用 StreamReader/StreamWriter
  • 性能敏感:FileStream
  • 异步操作:ReadAsync/WriteAsync
  • 二进制:BinaryWriter/BinaryReader

每种方法都有其适用场景,根据具体需求选择最合适的方法。

上一篇
下一篇