在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");
推荐最佳实践
- 使用
using
语句管理资源 - 对于大文件,使用流式读写
- 异步方法处理大文件
- 添加异常处理
- 注意文件编码
完整示例
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
每种方法都有其适用场景,根据具体需求选择最合适的方法。