C#文件操作全攻略:10大核心功能实现与使用示例

最近整合了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);
            }
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值