下面是“C#递归实现显示文件夹及所有文件并计算其大小的方法”的完整攻略。
1. 确定递归终止条件
首先,我们要确定递归的终止条件。在本题中,终止条件一般是当遍历到文件时,直接输出文件的名称和大小,并返回上一级目录继续遍历。因此,我们可以使用File
和Directory
类来判定当前路径是否为文件或目录,并在遇到文件时直接输出。
2. 确定遍历方式
其次,我们需要确定文件夹的遍历方式。在本题中,我们需要遍历目录下的所有文件和子目录,因此我们可以使用DirectoryInfo
的GetFiles
方法遍历文件,使用GetDirectories
方法遍历子目录,并通过递归方式遍历子目录下的文件和目录。因此,我们可以编写一个递归方法Traverse
,该方法接受一个路径参数,判断该路径是否为文件或目录,如果是文件则输出名称和大小,如果是目录则继续遍历子目录。
3. 计算文件夹大小
最后,我们需要计算文件夹的总大小。在本题中,我们可以在遇到文件时累加文件大小并返回给上一级调用方法,最终输出总大小。因此,在递归方法中,我们可以使用一个计数器totalSize
来累加文件大小,并在遍历完所有文件和目录后返回给上一级调用方法。
下面是示例代码,用于显示文件夹及所有文件并计算其大小:
using System;
using System.IO;
class Program
{
static void Main(string[] args)
{
string path = @"C:\Test";
Console.WriteLine("Files in {0}: ", path);
Traverse(path);
}
static void Traverse(string path)
{
long totalSize = 0; // 初始化总大小计数器
if (File.Exists(path))
{
// 如果当前路径为文件,输出文件名称和大小并返回上一级目录
FileInfo fileInfo = new FileInfo(path);
Console.WriteLine("{0} ({1:N0} bytes)", fileInfo.FullName, fileInfo.Length);
totalSize += fileInfo.Length;
return;
}
else if (Directory.Exists(path))
{
// 如果当前路径为目录,继续遍历子目录
DirectoryInfo dirInfo = new DirectoryInfo(path);
Console.WriteLine(dirInfo.FullName);
// 遍历目录下的所有文件
foreach (FileInfo file in dirInfo.GetFiles())
{
Console.WriteLine("\t{0} ({1:N0} bytes)", file.FullName, file.Length);
totalSize += file.Length;
}
// 遍历目录下的所有子目录
foreach (DirectoryInfo subDir in dirInfo.GetDirectories())
{
// 递归遍历子目录
Traverse(subDir.FullName);
totalSize += GetDirectorySize(subDir.FullName); // 累加子目录大小
}
}
Console.WriteLine("Total size: {0:N0} bytes", totalSize);
}
static long GetDirectorySize(string path)
{
// 计算文件夹大小
long size = 0;
if (Directory.Exists(path))
{
foreach (string file in Directory.GetFiles(path))
{
size += new FileInfo(file).Length;
}
foreach (string subDir in Directory.GetDirectories(path))
{
size += GetDirectorySize(subDir);
}
}
return size;
}
}
运行上述代码,将输出指定路径下所有文件夹及文件名称,并计算所有文件的总大小。例如,对于路径C:\Test
,输出如下:
Files in C:\Test:
C:\Test
C:\Test\test-file-1.txt (9 bytes)
C:\Test\test-file-2.txt (43 bytes)
Total size: 52 bytes
C:\Test\subdir
C:\Test\subdir\test-file-3.txt (4 bytes)
Total size: 4 bytes
Total size: 56 bytes
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#递归实现显示文件夹及所有文件并计算其大小的方法 - Python技术站