在C#中,通过扩展方法(extension methods)可以为现有的类型添加新的功能,而不需要修改原类型的定义。扩展方法通常用于提供实用的辅助功能,比如文件处理。
下面是一个示例的C#扩展类,它可以封装一些常用的文件操作方法。这个类可以添加到System.IO.File
或System.IO.Directory
类型上,使得文件和目录的操作更加便捷。
Csharp
深色版本
1using System;
2using System.IO;
3using System.Collections.Generic;
4using System.Linq;
5using System.Text;
6
7public static class FileExtensions
8{
9 /// <summary>
10 /// 获取文件的扩展名(不包含点号)
11 /// </summary>
12 /// <param name="file">文件信息</param>
13 /// <returns>文件扩展名</returns>
14 public static string GetExtension(this FileInfo file)
15 {
16 return Path.GetExtension(file.FullName).TrimStart('.');
17 }
18
19 /// <summary>
20 /// 读取文件内容为字符串
21 /// </summary>
22 /// <param name="file">文件信息</param>
23 /// <returns>文件内容</returns>
24 public static string ReadAllText(this FileInfo file)
25 {
26 return file.OpenText().ReadToEnd();
27 }
28
29 /// <summary>
30 /// 将字符串内容写入文件
31 /// </summary>
32 /// <param name="file">文件信息</param>
33 /// <param name="content">要写入的内容</param>
34 public static void WriteAllText(this FileInfo file, string content)
35 {
36 using (StreamWriter writer = file.CreateText())
37 {
38 writer.Write(content);
39 }
40 }
41
42 /// <summary>
43 /// 追加内容到文件末尾
44 /// </summary>
45 /// <param name="file">文件信息</param>
46 /// <param name="content">要追加的内容</param>
47 public static void AppendAllText(this FileInfo file, string content)
48 {
49 using (StreamWriter writer = file.AppendText())
50 {
51 writer.Write(content);
52 }
53 }
54
55 /// <summary>
56 /// 删除文件
57 /// </summary>
58 /// <param name="file">文件信息</param>
59 public static void Delete(this FileInfo file)
60 {
61 file.Delete();
62 }
63
64 /// <summary>
65 /// 移动文件到新位置
66 /// </summary>
67 /// <param name="file">文件信息</param>
68 /// <param name="destFileName">目标文件名</param>
69 public static void MoveTo(this FileInfo file, string destFileName)
70 {
71 file.MoveTo(destFileName);
72 }
73
74 /// <summary>
75 /// 列出目录下的所有文件,包括子目录
76 /// </summary>
77 /// <param name="directory">目录信息</param>
78 /// <returns>文件列表</returns>
79 public static List<FileInfo> GetAllFiles(this DirectoryInfo directory)
80 {
81 return directory.GetFiles("*", SearchOption.AllDirectories).ToList();
82 }
83
84 /// <summary>
85 /// 递归删除目录及其所有内容
86 /// </summary>
87 /// <param name="directory">目录信息</param>
88 public static void DeleteRecursively(this DirectoryInfo directory)
89 {
90 foreach (DirectoryInfo subDir in directory.GetDirectories())
91 {
92 subDir.DeleteRecursively();
93 }
94 foreach (FileInfo file in directory.GetFiles())
95 {
96 file.Delete();
97 }
98 directory.Delete();
99 }
100}
使用这个扩展类之后,你可以直接在FileInfo
或DirectoryInfo
的实例上调用上述方法,就像它们是类型本身的一部分一样。例如:
Csharp
深色版本
1FileInfo fileInfo = new FileInfo(@"C:\example.txt");
2string extension = fileInfo.GetExtension(); // 使用扩展方法
请注意,为了使这些扩展方法可用,你需要在你的代码文件中包含using FileExtensions;
语句,或者完全限定方法调用,如FileExtensions.GetExtension(fileInfo);
。然而,更好的做法是在同一命名空间下定义扩展方法和使用它们的类,或者在使用它们的代码文件顶部添加正确的using
指令。