C# 与文件:从新手到文件系统操作大师

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

为什么掌握 C# 中的文件操作是一项超能力?

\n\n

想象一下,您正在编写一个需要保存用户设置、记录错误或处理数千个文档的程序。如果没有文件系统操作技能,您将寸步难行。在 C# 中,文件操作不仅仅是枯燥地读取行。它是创建强大工具、解析器甚至迷你数据库的机会。

\n\n

在本文中,我们将全面解析:从简单的 File.ReadAllText 到高级的流和文件夹操作。您将学习如何不丢失数据、如何优化大文件读取以及如何绕过文件系统的“陷阱”。开始吧!

\n\n

英雄类:File、FileInfo、Directory 和 Path

\n\n

在 .NET 中,有两种文件操作方法:File 类的静态方法和 FileInfo 类的实例方法。前者适用于“读取-写入”的快速操作,后者适用于需要长时间处理单个文件并保持状态的情况。

\n\n

File vs FileInfo:何时使用哪个?

\n\n

File 是一个静态类。您编写 File.Exists("test.txt") 即可。很方便,但每次操作时系统都会重新检查路径。

\n\n

FileInfo — 您创建一次对象,然后调用方法。如果您对同一个文件执行多个操作,这会更快。

\n\n
// 快速方法\nif (File.Exists(@"C:\\data\\log.txt"))\n{\n    string content = File.ReadAllText(@"C:\\data\\log.txt");\n    Console.WriteLine(content);\n}\n\n// 专业方法\nFileInfo fileInfo = new FileInfo(@"C:\\data\\log.txt");\nif (fileInfo.Exists)\n{\n    using (StreamReader reader = fileInfo.OpenText())\n    {\n        string content = reader.ReadToEnd();\n        Console.WriteLine(content);\n    }\n}\n
\n\n

Directory 类遵循相同的原则——用于快速文件夹操作的静态方法。Path 是拼接路径的得力助手:Path.Combine("folder", "file.txt") 会自动添加正确的斜杠。

\n\n

读取文件:从小文件到巨型文件

\n\n

在 C# 中读取文件是在简单性和性能之间取得平衡的艺术。让我们分析三个层次。

\n\n

层次 1:一次性读取(适用于小文件)

\n\n

如果文件大小不超过 10 MB,请放心使用 ReadAllText 或 ReadAllLines。

\n\n
string text = File.ReadAllText("config.json");\nstring[] lines = File.ReadAllLines("users.csv");\n
\n\n

缺点:对于大文件,您可能会遇到 OutOfMemoryException。

\n\n

层次 2:逐行读取(适用于中等文件)

\n\n

使用 StreamReader — 逐行读取,不将全部内容加载到内存中。

\n\n
using (StreamReader reader = new StreamReader("big_log.txt"))\n{\n    string line;\n    while ((line = reader.ReadLine()) != null)\n    {\n        Console.WriteLine(line); // 处理每一行\n    }\n}\n
\n\n

请注意 using — 它确保即使发生错误,文件也会被关闭。

\n\n

层次 3:读取二进制数据(适用于专业人士)

\n\n

处理图像、存档或任何非文本文件需要 FileStream。

\n\n
using (FileStream fs = new FileStream("photo.jpg", FileMode.Open, FileAccess.Read))\n{\n    byte[] buffer = new byte[1024];\n    int bytesRead;\n    while ((bytesRead = fs.Read(buffer, 0, buffer.Length)) > 0)\n    {\n        // 处理数据块\n        Console.WriteLine($"已读取 {bytesRead} 字节");\n    }\n}\n
\n\n

写入文件:如何不丢失数据

\n\n

在 C# 中写入不仅仅是 File.WriteAllText。理解模式很重要:创建新文件、追加到末尾或覆盖。

\n\n

FileMode 的主要模式

\n
    \n
  • CreateNew<

博客

书籍推荐