文件操作 #

一、File类 #

1.1 读取文件 #

csharp
string text = File.ReadAllText("data.txt");
string text = File.ReadAllText("data.txt", Encoding.UTF8);

string[] lines = File.ReadAllLines("data.txt");
string[] lines = File.ReadAllLines("data.txt", Encoding.UTF8);

byte[] bytes = File.ReadAllBytes("image.png");

1.2 写入文件 #

csharp
File.WriteAllText("output.txt", "Hello World");
File.WriteAllText("output.txt", "Hello World", Encoding.UTF8);

File.WriteAllLines("output.txt", new[] { "Line1", "Line2", "Line3" });
File.WriteAllLines("output.txt", lines, Encoding.UTF8);

File.WriteAllBytes("output.bin", bytes);

1.3 追加内容 #

csharp
File.AppendAllText("log.txt", "New entry\n");
File.AppendAllText("log.txt", "New entry\n", Encoding.UTF8);

File.AppendAllLines("log.txt", new[] { "Entry1", "Entry2" });

1.4 复制、移动、删除 #

csharp
File.Copy("source.txt", "dest.txt");
File.Copy("source.txt", "dest.txt", overwrite: true);

File.Move("old.txt", "new.txt");

File.Delete("temp.txt");

bool exists = File.Exists("data.txt");

1.5 文件信息 #

csharp
DateTime created = File.GetCreationTime("data.txt");
DateTime modified = File.GetLastWriteTime("data.txt");
DateTime accessed = File.GetLastAccessTime("data.txt");

File.SetCreationTime("data.txt", DateTime.Now);
File.SetLastWriteTime("data.txt", DateTime.Now);

FileAttributes attrs = File.GetAttributes("data.txt");
File.SetAttributes("data.txt", FileAttributes.ReadOnly | FileAttributes.Hidden);

二、FileInfo类 #

2.1 创建FileInfo #

csharp
var fileInfo = new FileInfo("data.txt");

if (fileInfo.Exists)
{
    Console.WriteLine($"名称:{fileInfo.Name}");
    Console.WriteLine($"路径:{fileInfo.FullName}");
    Console.WriteLine($"大小:{fileInfo.Length}字节");
    Console.WriteLine($"扩展名:{fileInfo.Extension}");
    Console.WriteLine($"目录:{fileInfo.DirectoryName}");
}

2.2 文件操作 #

csharp
var fileInfo = new FileInfo("data.txt");

fileInfo.CopyTo("copy.txt");
fileInfo.CopyTo("copy.txt", overwrite: true);

fileInfo.MoveTo("newLocation.txt");

fileInfo.Delete();

fileInfo.Refresh();

2.3 创建文件流 #

csharp
var fileInfo = new FileInfo("data.txt");

using FileStream fs = fileInfo.OpenRead();
using FileStream fs = fileInfo.OpenWrite();
using FileStream fs = fileInfo.Open(FileMode.OpenOrCreate, FileAccess.ReadWrite);

using StreamWriter writer = fileInfo.CreateText();
using StreamReader reader = fileInfo.OpenText();

using FileStream fs = fileInfo.Create();

三、文件读写示例 #

3.1 读取文本文件 #

csharp
public static string ReadFileSafely(string path)
{
    try
    {
        if (!File.Exists(path))
            return null;
        
        return File.ReadAllText(path);
    }
    catch (IOException ex)
    {
        Console.WriteLine($"读取失败:{ex.Message}");
        return null;
    }
}

3.2 写入文本文件 #

csharp
public static void WriteFileSafely(string path, string content)
{
    try
    {
        string directory = Path.GetDirectoryName(path);
        if (!string.IsNullOrEmpty(directory) && !Directory.Exists(directory))
        {
            Directory.CreateDirectory(directory);
        }
        
        File.WriteAllText(path, content);
    }
    catch (IOException ex)
    {
        Console.WriteLine($"写入失败:{ex.Message}");
    }
}

3.3 逐行处理大文件 #

csharp
public static IEnumerable<string> ReadLinesLazy(string path)
{
    using var reader = new StreamReader(path);
    string line;
    while ((line = reader.ReadLine()) != null)
    {
        yield return line;
    }
}

foreach (var line in ReadLinesLazy("large.txt"))
{
    ProcessLine(line);
}

3.4 文件比较 #

csharp
public static bool FilesAreEqual(string path1, string path2)
{
    byte[] file1 = File.ReadAllBytes(path1);
    byte[] file2 = File.ReadAllBytes(path2);
    
    if (file1.Length != file2.Length)
        return false;
    
    for (int i = 0; i < file1.Length; i++)
    {
        if (file1[i] != file2[i])
            return false;
    }
    
    return true;
}

四、文件监控 #

4.1 FileSystemWatcher #

csharp
public class FileWatcher
{
    private readonly FileSystemWatcher _watcher;
    
    public FileWatcher(string path, string filter = "*.*")
    {
        _watcher = new FileSystemWatcher(path, filter)
        {
            NotifyFilter = NotifyFilters.LastWrite | NotifyFilters.FileName | NotifyFilters.DirectoryName,
            IncludeSubdirectories = true,
            EnableRaisingEvents = true
        };
        
        _watcher.Created += OnCreated;
        _watcher.Deleted += OnDeleted;
        _watcher.Changed += OnChanged;
        _watcher.Renamed += OnRenamed;
    }
    
    private void OnCreated(object sender, FileSystemEventArgs e)
    {
        Console.WriteLine($"文件创建:{e.FullPath}");
    }
    
    private void OnDeleted(object sender, FileSystemEventArgs e)
    {
        Console.WriteLine($"文件删除:{e.FullPath}");
    }
    
    private void OnChanged(object sender, FileSystemEventArgs e)
    {
        Console.WriteLine($"文件修改:{e.FullPath}");
    }
    
    private void OnRenamed(object sender, RenamedEventArgs e)
    {
        Console.WriteLine($"文件重命名:{e.OldFullPath} -> {e.FullPath}");
    }
}

五、临时文件 #

5.1 创建临时文件 #

csharp
string tempPath = Path.GetTempPath();
string tempFile = Path.GetTempFileName();

File.WriteAllText(tempFile, "临时内容");

File.Delete(tempFile);

5.2 使用临时文件 #

csharp
public static string ProcessWithTempFile(string content)
{
    string tempFile = Path.GetTempFileName();
    try
    {
        File.WriteAllText(tempFile, content);
        return ProcessFile(tempFile);
    }
    finally
    {
        File.Delete(tempFile);
    }
}

六、总结 #

文件操作要点:

方法 说明
ReadAllText 读取全部文本
WriteAllText 写入全部文本
AppendAllText 追加文本
Copy/Move/Delete 文件操作
Exists 检查存在
FileInfo 文件信息

下一步,让我们学习流操作!

最后更新:2026-03-26