C语言文件操作函数大全(超详细)
《C语言文件操作函数大全(超详细)》标题下,本文将聚焦C#(.NET)环境中的文件操作体系,结合跨平台特性与现代开发需求,系统梳理从基础读写到高级管理的核心方法。作为.NET生态的核心语言,C#通过`System.IO`命名空间提供了比传统C语言更安全、更易用的文件操作API,覆盖文件创建、读写、监控、压缩等全生命周期管理。
一、文件流基础操作
1.1 文件流创建与释放
C#通过`FileStream`类实现底层文件访问,支持同步/异步模式。创建文件流时需指定打开模式(`FileMode`)和访问权限(`FileAccess`):
// 创建新文件并写入数据
using (FileStream fs = new FileStream("test.txt", FileMode.Create, FileAccess.Write))
{
byte[] data = Encoding.UTF8.GetBytes("Hello, .NET File IO!");
fs.Write(data, 0, data.Length);
}
// using语句确保流自动释放
1.2 异步文件操作
.NET 4.5+引入的异步API(如`FileStream.ReadAsync`)可避免UI线程阻塞:
public async Task WriteFileAsync()
{
byte[] buffer = Encoding.UTF8.GetBytes("Async writing");
using (FileStream fs = new FileStream("async.txt", FileMode.Create))
{
await fs.WriteAsync(buffer, 0, buffer.Length);
}
}
二、高级读写方法
2.1 文本文件读写
`StreamReader`/`StreamWriter`提供文本级操作,自动处理编码转换:
// 写入多行文本
using (StreamWriter sw = new StreamWriter("lines.txt"))
{
sw.WriteLine("First line");
sw.WriteLine("Second line");
}
// 逐行读取
using (StreamReader sr = new StreamReader("lines.txt"))
{
string line;
while ((line = sr.ReadLine()) != null)
{
Console.WriteLine(line);
}
}
2.2 二进制文件处理
`BinaryReader`/`BinaryWriter`适用于结构化数据存储:
// 写入二进制数据
using (BinaryWriter bw = new BinaryWriter(File.Open("data.bin", FileMode.Create)))
{
bw.Write(123); // 写入整数
bw.Write(3.14f); // 写入浮点数
bw.Write("Binary"); // 写入字符串
}
// 读取二进制数据
using (BinaryReader br = new BinaryReader(File.Open("data.bin", FileMode.Open)))
{
int i = br.ReadInt32();
float f = br.ReadSingle();
string s = br.ReadString();
}
三、文件系统管理
3.1 路径操作类
`Path`类提供跨平台路径处理:
string fullPath = Path.Combine("folder", "subfolder", "file.txt");
// 输出:folder\subfolder\file.txt (Windows) 或 folder/subfolder/file.txt (Linux)
string extension = Path.GetExtension(fullPath); // ".txt"
string fileName = Path.GetFileNameWithoutExtension(fullPath); // "file"
3.2 目录操作
`Directory`类实现目录创建、枚举和删除:
// 创建多级目录
Directory.CreateDirectory(Path.Combine("a", "b", "c"));
// 递归删除目录
try { Directory.Delete("temp", true); }
catch (DirectoryNotFoundException) { /* 处理异常 */ }
3.3 文件属性管理
`FileInfo`和`DirectoryInfo`提供对象化操作:
FileInfo fi = new FileInfo("test.txt");
if (fi.Exists)
{
Console.WriteLine($"Size: {fi.Length} bytes");
Console.WriteLine($"Created: {fi.CreationTime}");
fi.Attributes |= FileAttributes.Hidden; // 设置隐藏属性
}
四、文件监控与压缩
4.1 文件系统监视器
`FileSystemWatcher`类可实时监控文件变化:
var watcher = new FileSystemWatcher
{
Path = @"C:\WatchFolder",
NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName,
Filter = "*.txt"
};
watcher.Changed += (s, e) => Console.WriteLine($"File changed: {e.Name}");
watcher.EnableRaisingEvents = true;
4.2 ZIP压缩解压
.NET 4.5+通过`ZipArchive`类内置ZIP支持:
// 创建ZIP文件
using (FileStream zipToOpen = new FileStream("archive.zip", FileMode.Create))
using (ZipArchive archive = new ZipArchive(zipToOpen, ZipArchiveMode.Create))
{
archive.CreateEntryFromFile("file1.txt", "extracted/file1.txt");
}
// 解压ZIP文件
using (ZipArchive archive = ZipFile.OpenRead("archive.zip"))
{
foreach (ZipArchiveEntry entry in archive.Entries)
{
entry.ExtractToFile(Path.Combine("output", entry.Name), true);
}
}
五、跨平台文件操作
5.1 路径分隔符处理
使用`Path.DirectorySeparatorChar`实现跨平台兼容:
string crossPlatformPath = $"data{Path.DirectorySeparatorChar}config.json";
5.2 长路径支持(.NET Core 3.1+)
通过`\\?\`前缀或`Path.GetFullPath`处理超长路径:
string longPath = @"\\?\C:\Very\Long\Path\...\file.txt";
六、性能优化技巧
6.1 缓冲区优化
自定义缓冲区大小可显著提升大文件读写性能:
const int BufferSize = 81920; // 80KB缓冲区
byte[] buffer = new byte[BufferSize];
using (FileStream fs = File.OpenRead("large.dat"))
{
int bytesRead;
while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) > 0)
{
// 处理数据
}
}
6.2 内存映射文件
对于超大型文件,使用`MemoryMappedFile`减少内存占用:
using (MemoryMappedFile mmf = MemoryMappedFile.CreateFromFile("huge.dat"))
using (MemoryMappedViewAccessor accessor = mmf.CreateViewAccessor())
{
int value = accessor.ReadInt32(0); // 从偏移量0读取整数
}
七、异常处理最佳实践
7.1 常见异常类型
- `FileNotFoundException`:文件不存在
- `DirectoryNotFoundException`:目录不存在
- `IOException`:通用I/O错误
- `UnauthorizedAccessException`:权限不足
7.2 防御性编程示例
try
{
string content = File.ReadAllText("config.json");
// 处理内容
}
catch (FileNotFoundException ex)
{
Console.WriteLine($"配置文件未找到: {ex.FileName}");
}
catch (UnauthorizedAccessException)
{
Console.WriteLine("无权限访问文件,请以管理员身份运行");
}
catch (IOException ex)
{
Console.WriteLine($"I/O错误: {ex.Message}");
}
八、现代.NET新增特性
8.1 Span
避免内存分配的零拷贝操作:
public void ProcessFile(string path)
{
Span buffer = stackalloc byte[1024];
using (FileStream fs = File.OpenRead(path))
{
int bytesRead = fs.Read(buffer);
// 处理buffer中的数据
}
}
8.2 文件加密集成
结合`System.Security.Cryptography`实现加密文件操作:
using (Aes aes = Aes.Create())
{
string encryptedPath = "data.aes";
// 加密写入
using (FileStream fsCrypt = new FileStream(encryptedPath, FileMode.Create))
using (CryptoStream cs = new CryptoStream(fsCrypt, aes.CreateEncryptor(), CryptoStreamMode.Write))
using (StreamWriter sw = new StreamWriter(cs))
{
sw.Write("Secret data");
}
}
关键词:C#文件操作、.NET文件流、异步文件IO、二进制读写、文件系统监控、ZIP压缩、跨平台路径、内存映射文件、异常处理、Span高性能
简介:本文系统梳理C#(.NET)环境下的文件操作体系,涵盖从基础流操作到高级文件管理的全场景解决方案。内容包含同步/异步文件读写、二进制与文本处理、目录管理、文件监控、ZIP压缩解压等核心功能,同时介绍跨平台路径处理、长路径支持、内存映射文件等现代开发技巧,最后提供异常处理最佳实践和.NET Core新增的高性能特性。