实用网络站
白蓝主题五 · 清爽阅读
首页  > 电脑进阶

C#开发中常用的文件操作方法,几行代码搞定读写删

C#开发时,经常要跟文件打交道:读配置、保存日志、导出Excel、批量处理用户上传的图片……这些事看似简单,但一不留神就容易出错——比如文件被占用、路径拼错、编码乱码、权限不足,或者忘了关流导致内存泄漏。

先搞清两个核心命名空间

大部分文件操作都离不开这两个命名空间:

using System.IO;
using System.Text;

别漏掉 System.Text,尤其处理中文内容时,编码问题最容易翻车。

快速读取一个文本文件

想读取整个文件内容?File.ReadAllText 最省心:

string content = File.ReadAllText(@"C:\temp\note.txt", Encoding.UTF8);

注意:如果文件不大(比如几百KB以内),用这个没问题;但如果文件超大(比如几百MB的日志),建议用 StreamReader 逐行读,避免一次性占满内存。

逐行读取大文件

比如处理服务器每天生成的 access.log:

using (var reader = new StreamReader(@"D:\logs\access.log", Encoding.UTF8))
{
    string line;
    while ((line = reader.ReadLine()) != null)
    {
        if (line.Contains("404"))
        {
            Console.WriteLine(line);
        }
    }
}

这里用了 using 自动释放资源,不用手动调 reader.Close(),安全又省事。

写入文本文件(覆盖或追加)

覆盖写入:

File.WriteAllText(@"C:\temp\report.txt", "今日统计:成功32次,失败5次", Encoding.UTF8);

追加内容(比如记录日志):

File.AppendAllText(@"C:\temp\app.log", $"[{DateTime.Now:HH:mm:ss}] 用户登录失败\r\n", Encoding.UTF8);

检查文件是否存在、创建目录

别急着操作,先判断再动手:

string filePath = @"C:\data\config.json";
if (!File.Exists(filePath))
{
    Console.WriteLine("配置文件丢失,正在生成默认配置...");
    Directory.CreateDirectory(Path.GetDirectoryName(filePath));
    File.WriteAllText(filePath, "{\"theme\":\"dark\"}", Encoding.UTF8);
}

Path.GetDirectoryName 能自动提取路径中的文件夹部分,配合 Directory.CreateDirectory,哪怕多层目录不存在也能一次建好。

复制、移动、删除文件

系统级操作,一行一个事:

// 复制并覆盖
File.Copy(@"C:\source\data.xlsx", @"D:\backup\data_2024.xlsx", true);

// 移动(即剪切)
File.Move(@"C:\temp\temp.csv", @"C:\done\processed.csv");

// 删除(不进回收站)
File.Delete(@"C:\temp\old.tmp");

注意:File.Copy 第三个参数设为 true 才能覆盖同名文件,否则会报异常。

小技巧:路径拼接别硬拼字符串

别这么写:@"C:\user\" + username + "\data.txt"——遇到用户名含反斜杠或空格就崩。

换成这个更稳:

string path = Path.Combine(@"C:\users", username, "data.txt");

Path.Combine 会自动处理斜杠方向、去重、清理空段,Windows/macOS/Linux 全兼容。

最后提醒一句

在Web项目(比如ASP.NET Core)里操作文件,别直接写绝对路径如 C:\temp。要用 IWebHostEnvironment.WebRootPathIWebHostEnvironment.ContentRootPath 拿真实路径,不然部署到Linux服务器就找不着家了。