遍歷文件夾兩種實現(xiàn)方式

在這里插入圖片描述

瘋狂java講義習(xí)題11.1使用Java語言列出了指定目錄的所有文件。這里使用C#來實現(xiàn)同樣的功能授账,使用遞歸和非遞歸兩種方式吗购“探#基于文件遍歷,實現(xiàn)類似everything的功能以及grep功能阳似。

C#

微軟出品骚勘,必屬精品。

C#和Java誰更好是一個一直存在的問題障般。怎么說那调鲸,如果一定要選擇一個的話盛杰,我選擇C#,因為.NET平臺的架構(gòu)是Java無法比擬的(能否最終實現(xiàn)藐石,還要看微軟了)即供。

.NET架構(gòu):


在這里插入圖片描述

.NET5的架構(gòu):


在這里插入圖片描述

Ubuntu下C#開發(fā)

使用的IDE是MonoDevelop(https://www.monodevelop.com/)。

Mono是最早的.NET開源實現(xiàn)于微,是Xamarin和Unity的基礎(chǔ)逗嫡。在《C# 7.0本質(zhì)論》一書中。作者說: 目前Mono已被.NET Core 替代株依。不過對于開發(fā)應(yīng)用程序影響不大驱证。

文件夾遍歷

遞歸版本

代碼實現(xiàn)

思路很簡單,如果是文件的話恋腕,就停止遞歸抹锄。如果是目錄的話就遞歸執(zhí)行。

 /*
  * string path: 文件或者文件夾字符串       
  */       
 public static void RecvDir(string path)
 {
     //判斷是否是文件 
     /*if (File.Exists(path))
     {
         Console.WriteLine("文件名稱是: " + path);
     }
     else
     {*/
     Console.WriteLine("目錄名稱是: " + path);
     List<string> dirs = new List<string>(Directory.EnumerateDirectories(path));

     foreach (var dir in dirs)
     {
         Console.WriteLine($@"包含的目錄{dir}");
         RecvDir(dir);
     }
     Console.WriteLine($"{dirs.Count} directories found.");
     List<string> files = new List<string>(Directory.EnumerateFiles(path));

     foreach (string file in files)
     {
         Console.WriteLine($@"包含的文件{file}");
     }
     Console.WriteLine($"{files.Count} files found");
     //}
 }

運行結(jié)果:


在這里插入圖片描述
說說遞歸

用遞歸實現(xiàn)方法的時候常見的錯誤是在程序運行的時候發(fā)生棧溢出(stack overflow), 這通常是由于無限遞歸造成的荠藤。假如方法持續(xù)調(diào)用自身伙单,永遠抵達不了標志遞歸結(jié)束的位置,就會發(fā)生無限遞歸哈肖。必須仔細檢查每個遞歸的實現(xiàn)吻育,確保遞歸調(diào)用是有限的而不是無限的

常應(yīng)的遞歸模式:

M(x)
{
    if x 已達最小淤井,不可繼續(xù)分解
        返回結(jié)果
    else
        (1)采取一些操作使問題變得更小
        (2)遞歸調(diào)用M來解決更小的問題
        (3)根據(jù)(1)和(2)計算結(jié)果
        返回結(jié)果

}

非遞歸版本

在進行內(nèi)核開發(fā)中布疼,盡量不要用遞歸,因為內(nèi)核的棻液荩空間有限游两,而遞歸需要不斷創(chuàng)建新的棧,如果層次很深的話漩绵,就會導(dǎo)致椘鞴蓿空間很大,造成內(nèi)核的椊バ校空間不足。因此這里給出非遞歸版本的實現(xiàn)铸董,這里基于的是BFS廣度優(yōu)先搜索(BFS)祟印,同時添加了異常處理。

代碼實現(xiàn)
 /*
 * string path: 文件或者文件夾字符串       
 */
public static void NonRecvDir(string path)
{
    List<string> temp = new List<string>();
    temp.Add(path);
    for (int i = 0; i < temp.Count; i++)
    {
        if (File.Exists(temp[i]))
        {
            continue;
        }
        else
        {
            try
            {
                List<string> dirs = new List<string>(Directory.EnumerateDirectories(temp[i]));

                foreach (var dir in dirs)
                {
                    temp.Add(dir);
                }
                List<string> files = new List<string>(Directory.EnumerateFiles(temp[i]));

                foreach (string file in files)
                {
                    temp.Add(file);
                }

            }
            catch (UnauthorizedAccessException ex)
            {
                Console.WriteLine(ex.Message);
            }
            catch (PathTooLongException ex)
            {
                Console.WriteLine(ex.Message);
            }
            catch(DirectoryNotFoundException ex)
            {
                Console.WriteLine(ex.Message);   
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
        }
    }
    foreach (string pathTemp in temp)
    {
        Console.WriteLine(pathTemp);
    }
}

運行結(jié)果:


在這里插入圖片描述
說說BFS

廣度優(yōu)先搜索算法(Breadth-First-Search粟害,縮寫為 BFS)蕴忆,是一種利用隊列實現(xiàn)的搜索算法。簡單來說悲幅,其搜索過程和 “湖面丟進一塊石頭激起層層漣漪” 類似套鹅。

深度優(yōu)先搜索算法(Depth-First-Search站蝠,縮寫為 DFS),是一種利用遞歸實現(xiàn)的搜索算法卓鹿。簡單來說菱魔,其搜索過程和 “不撞南墻不回頭” 類似。

BFS 的重點在于隊列吟孙,而 DFS 的重點在于遞歸澜倦。這是它們的本質(zhì)區(qū)別。

寫在最后

C#是目前微軟主推的語言杰妓,而中國即使像華為這樣的頂級公司藻治,依然沒有一門自己主推的語言。目前國產(chǎn)手機巷挥,國產(chǎn)操作系統(tǒng)這些很能激起人們的愛國情懷和購買欲望桩卵,但是這些所謂的國產(chǎn)系統(tǒng),國產(chǎn)手機又有多少是真正國產(chǎn)的倍宾,大部分都是基于Linux內(nèi)核來搞出來的雏节,當然了,能做到這一步也很不容易凿宾。

相較于國產(chǎn)系統(tǒng)和國產(chǎn)手機矾屯,國產(chǎn)語言貌似根本就沒有(易語言除外,非常依賴于Window操作系統(tǒng)的一門語言)初厚,甚至這個概念很少被提及件蚕,個人感覺,語言是一切的基礎(chǔ)产禾,搞一門語言的意義或許比搞一個操作系統(tǒng)的意義更加重要排作。

當然了,目前主流的語言大部分都已經(jīng)開源了亚情,但是沒有一門屬于自己國家的開發(fā)語言總感覺少點什么妄痪。

公眾號

更多內(nèi)容,歡迎關(guān)注我的微信公眾號: 無情劍客楞件。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末衫生,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子土浸,更是在濱河造成了極大的恐慌罪针,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,723評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件黄伊,死亡現(xiàn)場離奇詭異泪酱,居然都是意外死亡,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評論 2 382
  • 文/潘曉璐 我一進店門墓阀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來毡惜,“玉大人,你說我怎么就攤上這事斯撮【铮” “怎么了?”我有些...
    開封第一講書人閱讀 152,998評論 0 344
  • 文/不壞的土叔 我叫張陵吮成,是天一觀的道長橱乱。 經(jīng)常有香客問我,道長粱甫,這世上最難降的妖魔是什么泳叠? 我笑而不...
    開封第一講書人閱讀 55,323評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮茶宵,結(jié)果婚禮上危纫,老公的妹妹穿的比我還像新娘。我一直安慰自己乌庶,他們只是感情好种蝶,可當我...
    茶點故事閱讀 64,355評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著瞒大,像睡著了一般螃征。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上透敌,一...
    開封第一講書人閱讀 49,079評論 1 285
  • 那天盯滚,我揣著相機與錄音,去河邊找鬼酗电。 笑死魄藕,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的撵术。 我是一名探鬼主播背率,決...
    沈念sama閱讀 38,389評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼嫩与!你這毒婦竟也來了寝姿?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,019評論 0 259
  • 序言:老撾萬榮一對情侶失蹤划滋,失蹤者是張志新(化名)和其女友劉穎会油,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體古毛,經(jīng)...
    沈念sama閱讀 43,519評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,971評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了稻薇。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嫂冻。...
    茶點故事閱讀 38,100評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖塞椎,靈堂內(nèi)的尸體忽然破棺而出桨仿,到底是詐尸還是另有隱情,我是刑警寧澤案狠,帶...
    沈念sama閱讀 33,738評論 4 324
  • 正文 年R本政府宣布服傍,位于F島的核電站,受9級特大地震影響骂铁,放射性物質(zhì)發(fā)生泄漏吹零。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,293評論 3 307
  • 文/蒙蒙 一拉庵、第九天 我趴在偏房一處隱蔽的房頂上張望灿椅。 院中可真熱鬧,春花似錦钞支、人聲如沸茫蛹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽婴洼。三九已至,卻和暖如春撼嗓,著一層夾襖步出監(jiān)牢的瞬間柬采,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評論 1 262
  • 我被黑心中介騙來泰國打工静稻, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留警没,地道東北人。 一個月前我還...
    沈念sama閱讀 45,547評論 2 354
  • 正文 我出身青樓振湾,卻偏偏與公主長得像杀迹,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子押搪,可洞房花燭夜當晚...
    茶點故事閱讀 42,834評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 原文出處:http://laocao.blog.51cto.com/480714/525140 遍歷文件夾是一個很...
    js_nbie閱讀 2,048評論 0 0
  • 在給出圖的定義后第一個問題就是如何遍歷圖的所有頂點树酪,有兩種最基礎(chǔ)的圖遍歷算法。如果給圖添加更多的特征和屬性大州,將產(chǎn)生...
    9bc96fd72f8e閱讀 4,923評論 0 1
  • 前言: 自從進入公司做游戲插件開發(fā), 到目前為止大約有兩個星期都在尋找如何注入第三方SDK的方法, 這里稍微提一下...
    請叫我大帥666閱讀 4,276評論 11 4
  • 表情是什么续语,我認為表情就是表現(xiàn)出來的情緒。表情可以傳達很多信息厦画。高興了當然就笑了疮茄,難過就哭了滥朱。兩者是相互影響密不可...
    Persistenc_6aea閱讀 124,193評論 2 7
  • 16宿命:用概率思維提高你的勝算 以前的我是風(fēng)險厭惡者,不喜歡去冒險力试,但是人生放棄了冒險徙邻,也就放棄了無數(shù)的可能。 ...
    yichen大刀閱讀 6,033評論 0 4