在日常开发中,对文件进行读写是一项基本且重要的任务。C# 提供了多种方式来处理文件和流,包括但不限于 System.IO
命名空间下的类,如 FileStream
, StreamReader
, StreamWriter
, BinaryReader
, BinaryWriter
等。本文将从基础概念出发,逐步深入探讨这些类的使用方法,并指出一些常见的错误及其避免策略。
文件操作基础
创建和打开文件
示例代码:
using System;
using System.IO;
class FileOperations {
static void Main() {
string filePath = @"C:\temp\example.txt";
// 使用 FileStream 打开文件
using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write)) {
byte[] info = new UTF8Encoding(true).GetBytes("Hello World!");
fs.Write(info, 0, info.Length);
}
// 读取文件
using (StreamReader sr = new StreamReader(filePath)) {
String s = sr.ReadToEnd();
Console.WriteLine("读取的内容: " {
s});
}
}
}
错误处理
常见错误:
- 文件不存在:尝试访问一个不存在的文件。
- 权限问题:没有足够的权限去读写文件。
- 文件被占用:文件正在被其他程序使用。
如何避免:
- 在操作文件前检查文件是否存在。
- 检查是否有足够的权限。
- 尽量使用
using
语句确保文件正确关闭,防止资源泄露。
文件流操作
文件流的基本概念
FileStream
是 System.IO
命名空间中的一个类,用于创建或打开文件并提供对文件的原始字节流的访问。它支持对文件的读写操作。
使用示例
写入二进制数据
using System;
using System.IO;
class FileStreamExample {
static void Main() {
string filePath = @"C:\temp\binaryData.bin";
byte[] data = {
1, 2, 3, 4, 5};
// 写入数据
using (FileStream fs = new FileStream(filePath, FileMode.Create, FileAccess.Write)) {
fs.Write(data, 0, data.Length);
}
// 读取数据
using (FileStream fs = new FileStream(filePath, FileMode.Open, FileAccess.Read)) {
byte[] readData = new byte[5];
fs.Read(readData, 0, 5);
Console.WriteLine(BitConverter.ToString(readData));
}
}
}
错误处理与优化建议
- 异常处理:总是包裹在 try-catch 块中,以便优雅地处理可能出现的任何异常。
- 性能考虑:对于大文件的操作,应考虑使用缓冲区来提高效率。
- 安全编码实践:避免硬编码文件路径,使用参数化查询或其他安全机制处理用户输入。
通过以上介绍,我们了解了 C# 中文件操作的基础知识以及如何利用 FileStream
类来进行更底层的文件流操作。掌握这些技巧对于任何希望提升自己编程技能的开发者来说都是必不可少的。