文件操作 #
一、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