C#遞歸實(shí)現(xiàn)顯示文件夾及所有文件并計(jì)算其大小的方法
算法中遞歸的一個(gè)典型應(yīng)用就是遍歷目標(biāo)文件夾,并把該文件夾下的所有文件和文件夾打印或顯示出來,還可以遞歸計(jì)算出目標(biāo)文件夾的總大小。本文即以實(shí)例形式展示了C#遞歸實(shí)現(xiàn)顯示目標(biāo)文件夾的所有文件和文件夾,并計(jì)算目標(biāo)文件夾的大小的方法。
具體實(shí)現(xiàn)代碼如下:
class Program
{
static void Main(string[] args)
{
Console.WriteLine("輸入目標(biāo)文件夾");
string path = Console.ReadLine();
FindFoldersAndFiles(path);
Console.WriteLine("\r\n");
Console.WriteLine("目標(biāo)文件夾的總大小為:{0}個(gè)字節(jié)",GetDirectoryLength(path));
Console.ReadKey();
}
//遞歸目標(biāo)文件夾中的所有文件和文件夾
private static void FindFoldersAndFiles(string path)
{
Console.WriteLine("文件夾" + path);
//遍歷目標(biāo)文件夾的所有文件
foreach (string fileName in Directory.GetFiles(path))
{
Console.WriteLine("┣" + fileName);
}
//遍歷目標(biāo)文件夾的所有文件夾
foreach (string directory in Directory.GetDirectories(path))
{
FindFoldersAndFiles(directory);
}
}
//遞歸計(jì)算文件夾大小
static long GetDirectoryLength(string path)
{
if (!Directory.Exists(path))
{
return 0;
}
long size = 0;
//遍歷指定路徑下的所有文件
DirectoryInfo di = new DirectoryInfo(path);
foreach (FileInfo fi in di.GetFiles())
{
size += fi.Length;
}
//遍歷指定路徑下的所有文件夾
DirectoryInfo[] dis = di.GetDirectories();
if (dis.Length > 0)
{
for (int i = 0; i < dis.Length; i++)
{
size += GetDirectoryLength(dis[i].FullName);
}
}
return size;
}
}

如上圖所示,即為本文實(shí)例在遍歷目標(biāo)文件夾時(shí),使用遞歸顯示目標(biāo)文件夾下所有文件夾和文件,并使用遞歸計(jì)算目標(biāo)文件夾的總大小。
希望對大家學(xué)習(xí)C#的算法有一定幫助。
相關(guān)文章
C#使用自定義的泛型節(jié)點(diǎn)類實(shí)現(xiàn)二叉樹類
這篇文章主要為大家詳細(xì)介紹了C#如何使用自定義的泛型節(jié)點(diǎn)類 Node<T>實(shí)現(xiàn)二叉樹類BinaryTree<T>及其方法,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2024-03-03
C#中比較常用的DateTime結(jié)構(gòu)的使用方法
這篇文章主要介紹了C#中比較常用的DateTime結(jié)構(gòu)的使用方法,需要的朋友可以參考下2015-11-11
基于C# wpf 實(shí)現(xiàn)Grid內(nèi)控件拖動詳情
這篇文章主要介紹了基于C# wpf 實(shí)現(xiàn)Grid內(nèi)控件拖動,有一些業(yè)務(wù)場景中我們需要拖動控件,在Grid中就可以實(shí)現(xiàn)控件拖動,通過設(shè)置Margin屬性即可,下面文章我們來看看具體的實(shí)現(xiàn)內(nèi)容2021-11-11
C#利用Refit實(shí)現(xiàn)JWT自動續(xù)期詳解
Refit?是一個(gè)受到Square的Retrofit庫(Java)啟發(fā)的自動類型安全REST庫,這篇文章主要為大家介紹了C#如何利用Refit實(shí)現(xiàn)JWT自動續(xù)期,感興趣的可以了解下2023-08-08

