Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • 第三部分:C#应用开发

第三部分:C#应用开发

第7章:文件与数据处理

7.1 文件读写操作

7.1.1 文件系统基础

C#通过System.IO命名空间提供丰富的文件操作功能,核心类包括:

  • File:静态方法实现文件创建、复制、删除等操作
  • FileInfo:实例化方式操作文件,提供更多属性(如创建时间、大小等)
  • Directory/DirectoryInfo:目录操作类
  • Path:跨平台路径处理工具类
// 示例:检查文件是否存在
if (File.Exists("test.txt"))
{
    Console.WriteLine("文件已存在");
}

7.1.2 文本文件读写

写入文本文件:

// 使用File.WriteAllText(覆盖写入)
File.WriteAllText("demo.txt", "Hello World");

// 使用StreamWriter(追加模式)
using (var writer = new StreamWriter("log.txt", append: true))
{
    writer.WriteLine($"{DateTime.Now}: 系统启动");
}

读取文本文件:

// 读取全部内容
string content = File.ReadAllText("config.ini");

// 逐行读取
foreach (string line in File.ReadLines("data.csv"))
{
    Console.WriteLine(line);
}

7.1.3 二进制文件操作

使用BinaryReader/BinaryWriter处理非文本数据:

// 写入二进制数据
using (var stream = File.Create("data.bin"))
using (var writer = new BinaryWriter(stream))
{
    writer.Write(3.14);  // double
    writer.Write(42);    // int
    writer.Write("C#");  // string
}

// 读取二进制数据
using (var stream = File.OpenRead("data.bin"))
using (var reader = new BinaryReader(stream))
{
    double pi = reader.ReadDouble();
    int num = reader.ReadInt32();
    string lang = reader.ReadString();
}

7.1.4 文件流操作(FileStream)

处理大文件时建议使用流式读写:

// 异步文件复制(适合大文件)
async Task CopyFileAsync(string source, string dest)
{
    using (FileStream readStream = File.Open(source, FileMode.Open))
    using (FileStream writeStream = File.Create(dest))
    {
        await readStream.CopyToAsync(writeStream);
    }
}

7.1.5 特殊文件处理

  • CSV文件:建议使用专用库(如CsvHelper)
  • 日志文件:考虑使用NLog或Serilog等框架
  • 临时文件:使用Path.GetTempFileName()生成

7.1.6 最佳实践

  1. 始终使用using语句确保资源释放
  2. 处理大文件时采用异步操作(async/await)
  3. 考虑文件权限问题(IOException处理)
  4. 跨平台开发时注意路径分隔符(使用Path.Combine())

7.1.7 常见异常处理

try
{
    File.ReadAllText("missing.txt");
}
catch (FileNotFoundException ex)
{
    Console.WriteLine($"文件未找到: {ex.FileName}");
}
catch (UnauthorizedAccessException)
{
    Console.WriteLine("无访问权限");
}
catch (IOException ex) when (ex is DirectoryNotFoundException)
{
    Console.WriteLine("目录不存在");
}

7.1.8 现代改进(.NET 6+)

  • File.ReadLinesAsync():异步逐行读取
  • FileOptions枚举新增Unbuffered选项
  • 增强的Span<T>支持提高性能

注意:实际开发中应考虑使用IWebHostEnvironment(ASP.NET Core)或平台特定API(如Xamarin/Maui)获取正确的文件路径。

Last Updated:: 5/3/25, 11:01 PM