最近整合了C#文件操作的高频应用场景与代码实现,覆盖基础到高阶开发需求,结合企业级开发规范与性能优化技巧,方便掌握文件系统开发。
一、基础文件操作模块
1. 文件存在性检查与创建
/// <summary>
/// 安全文件创建器(自动处理目录缺失)
/// </summary>
public static void SafeFileCreate(string path)
{
if (!File.Exists(path))
{
var directory = Path.GetDirectoryName(path);
// 自动创建缺失目录[3,5](@ref)
if (!Directory.Exists(directory))
{
Directory.CreateDirectory(directory);
}
File.Create(path).Dispose(); // 立即释放文件句柄
}
}
应用场景:配置文件初始化、日志文件自动生成
2. 原子化文件写入
/// <summary>
/// 安全写入文本文件(防写入中断)
/// </summary>
public static void AtomicWrite(string path, string content)
{
string tempFile = Path.GetTempFileName();
try
{
// 先写入临时文件[2](@ref)
File.WriteAllText(tempFile, content, Encoding.UTF8);
// 原子替换目标文件[5](@ref)
File.Replace(tempFile, path, null);
}
finally
{
if (File.Exists(tempFile))
File.Delete(tempFile);
}
}
优势:避免写入过程中断导致文件损坏
二、进阶文件处理模块
3. 加密文件传输
/// <summary>
/// AES-256加密文件复制
/// </summary>
public static void EncryptedCopy(string source, string dest, byte[] key)
{
using (var aes = Aes.Create())
{
aes.Key = key;
aes.GenerateIV();
using (var input = File.OpenRead(source))
using (var output = new FileStream(dest, FileMode.Create))
{
output.Write(aes.IV, 0, aes.IV.Length); // 写入IV头
using (var cryptoStream = new CryptoStream(output,
aes.CreateEncryptor(), CryptoStreamMode.Write))
{
input.CopyTo(cryptoStream);
}
}
}
}
应用场景:敏感数据备份、安全文件传输
4. 实时文件监控
/// <summary>
/// 智能文件变更监听服务
/// </summary>
public class FileWatcher
{
private FileSystemWatcher _watcher;
public void Start(string path, string filter = "*.*")
{
_watcher = new FileSystemWatcher
{
Path = path,
Filter = filter,
NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName,
EnableRaisingEvents = true
};
// 防事件重复触发[3](@ref)
_watcher.Changed += (s, e) => OnChangedDelayed(e);
_watcher.Created += (s, e) => OnCreatedDelayed(e);
}
private async void OnChangedDelayed(FileSystemEventArgs e)
{
await Task.Delay(500); // 等待文件释放
Console.WriteLine($"文件变更:{e.Name}");
}
}
典型应用:配置文件热重载、日志实时分析
三、企业级文件管理模块
5. 滚动日志系统
/// <summary>
/// 按日期滚动的日志记录器
/// </summary>
public class RollingLogger
{
private readonly string _logDirectory;
public RollingLogger(string logDir = "Logs")
{
_logDirectory = logDir;
Directory.CreateDirectory(logDir);
}
public void Log(string message)
{
string logFile = Path.Combine(_logDirectory,
$"log_{DateTime.Now:yyyyMMdd}.txt");
// 异步追加日志[8](@ref)
Task.Run(() =>
{
File.AppendAllText(logFile,
$"[{DateTime.Now:HH:mm:ss}] {message}\n");
});
}
}
功能特性:自动按天分割、异步写入提升性能
6. 智能文件清理
/// <summary>
/// 自动清理过期文件
/// </summary>
public static void CleanExpiredFiles(string directory,
TimeSpan maxAge, string pattern = "*.*")
{
var cutoff = DateTime.Now - maxAge;
Directory.GetFiles(directory, pattern)
.Select(f => new FileInfo(f))
.Where(f => f.LastWriteTime < cutoff)
.ToList()
.ForEach(f =>
{
try { f.Delete(); }
catch { /* 记录删除失败 */ }
});
}
应用场景:临时文件清理、日志归档管理
四、最佳实践与性能优化
7. 高效大文件处理
/// <summary>
/// 分块读取大文件(内存优化)
/// </summary>
public IEnumerable<string> ReadLargeFile(string path)
{
using (var stream = new FileStream(path, FileMode.Open,
FileAccess.Read, FileShare.Read, 4096, FileOptions.SequentialScan))
using (var reader = new StreamReader(stream))
{
char[] buffer = new char[8192];
int bytesRead;
while ((bytesRead = reader.Read(buffer, 0, buffer.Length)) > 0)
{
yield return new string(buffer, 0, bytesRead);
}
}
}
技术亮点:流式处理避免内存溢出
8. 异常处理规范
try
{
// 文件操作代码
}
catch (IOException ex) when (ex.HResult == -2147024864) // 文件被占用
{
// 实现重试逻辑[3,4](@ref)
}
catch (UnauthorizedAccessException ex)
{
// 权限问题处理[4](@ref)
}
catch (PathTooLongException ex)
{
// 路径长度限制处理[3](@ref)
}
五、综合应用案例
文件备份同步工具
/// <summary>
/// 增量备份服务
/// </summary>
public class IncrementalBackup
{
public void SyncFolders(string source, string destination)
{
foreach (string file in Directory.GetFiles(source, "*",
SearchOption.AllDirectories))
{
string destFile = file.Replace(source, destination);
if (!File.Exists(destFile) ||
File.GetLastWriteTime(file) > File.GetLastWriteTime(destFile))
{
Directory.CreateDirectory(Path.GetDirectoryName(destFile));
File.Copy(file, destFile, true);
}
}
}
}