C#遍历指定文件夹下的所有文件和所有子目录

思考并回答以下问题:

  • 如何获得子目录?
  • 如何获得目录下的文件?
  • 怎么把结果写入txt?
  • 递归怎么使用?

程序使用Directory、DirectoryInfo类

1
2
3
4
5
6
7
Directory.GetCurrentDirectory()获得当前运行程序的路径
DirectoryInfo对象.GetDirectories()获得该文件夹下的子目录,返回类型为DirectoryInfo
DirectoryInfo对象.GetFiles()获得该文件夹下的文件,返回类型为FileInfo

DirectoryInfo对象.Name获得文件夹名
DirectoryInfo对象.FullName获得文件夹完整的路径名
FileInfo对象.Name和FileInfo对象.FullName 同理

程序使用以上方法,递归地输出当前运行程序所在的磁盘下的所有文件名和子目录名,并将结果保存在指定的txt文件中。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
using System;
using System.IO;

namespace GetAllFiles
{
class Program
{
static void Main(string[] args)
{
// 获取当前程序所在的文件路径
string cwd = Directory.GetCurrentDirectory();
string drive = cwd.Substring(0, 3); // 取盘符 D:\

StreamWriter sw = null;

try
{
// 创建输出流,将得到文件名子目录名保存到txt中
sw = new StreamWriter(new FileStream("files.txt", FileMode.Append));
sw.WriteLine("根目录:" + drive);
FindDirectories(sw, drive, 2);
}
catch (IOException e)
{
Console.WriteLine(e.Message);
}
finally
{
if (sw != null)
{
sw.Close();
Console.WriteLine("完成");
}
}

Console.ReadKey();
}
/// <summary>
/// 获得指定路径下所有文件名
/// </summary>
/// <param name="sw">写入流</param>
/// <param name="path">目录路径</param>
/// <param name="indent">缩进</param>
public static void GetFileName(StreamWriter sw, string path, int indent)
{
DirectoryInfo root = new DirectoryInfo(path);
foreach (FileInfo f in root.GetFiles())
{
for (int i = 0; i < indent; i++)
{
sw.Write(" ");
}
sw.WriteLine(f.Name);
}
}

/// <summary>
/// 打印某目录下所有子目录名字并存入txt 递归
/// </summary>
/// <param name="directory"></param>
/// <param name="directory"></param>
/// <param name="directory"></param>
static void FindDirectories(StreamWriter sw, string directory, int indent)
{
GetFileName(sw, directory, indent);
DirectoryInfo dirInfo = new DirectoryInfo(directory);

foreach (DirectoryInfo d in dirInfo.GetDirectories())
{
for (int i = 0; i < indent; i++)
{
sw.Write(" ");
}
sw.WriteLine("文件夹:" + d.Name);
FindDirectories(sw, d.FullName, indent + 2);
sw.WriteLine();
}
}
}
}

执行结果:
files.txt和此程序的exe在同一个目录下。

0%