欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

遍歷文件系統(tǒng)目錄樹的深入理解

 更新時(shí)間:2013年05月31日 14:55:04   作者:  
本篇文章是對(duì)遍歷文件系統(tǒng)目錄樹進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
在c#中可以遍歷指定驅(qū)動(dòng)器或指定目錄下嵌套目錄中的所有文件或者任意深度的文件。通過遍歷可以檢索string形式的目錄名和文件名,也可以檢索 System.IO.FileInfo 或 System.IO.DirectoryInfo 對(duì)象形式的其他信息。可以通過遞歸遍歷堆棧遍歷兩種方式實(shí)現(xiàn)目錄遍歷。
遞歸遍歷
遞歸算法簡(jiǎn)單,但嵌套樹太深,可能會(huì)引起堆棧溢出異常。
復(fù)制代碼 代碼如下:

/// <summary>
    /// 通過遞歸方式訪問目錄樹
    /// </summary>
    class RecursiveAccessDirectory
    {
        //聲明并實(shí)例化一個(gè)字符串集合
        static System.Collections.Specialized.StringCollection log
            = new System.Collections.Specialized.StringCollection();
        static void Main()
        {
            /*該部門代碼循環(huán)訪問本機(jī)所有驅(qū)動(dòng)器上的文件
             *
             *
            //返回計(jì)算機(jī)邏輯驅(qū)動(dòng)器名稱的字符串?dāng)?shù)組
            //包括光驅(qū)及連接計(jì)算機(jī)的移動(dòng)驅(qū)動(dòng)器
            string[] drives = System.Environment.GetLogicalDrives();
            foreach (string dr in drives)
            {
                System.IO.DriveInfo di = new System.IO.DriveInfo(dr);
                if (!di.IsReady)
                {
                    Console.WriteLine("驅(qū)動(dòng)器 {0} 不能讀出", di.Name);
                    continue;
                }
                System.IO.DirectoryInfo rootDir = di.RootDirectory;
                WalkDirectoryTree(rootDir);
            }
           */
            /*循環(huán)訪問指定目錄下的文件夾
             *
             */
            System.IO.DirectoryInfo rootDir = new System.IO.DirectoryInfo(@"C:\test");
            WalkDirectoryTree(rootDir);
            Console.WriteLine("限制用戶訪問文件:");
            foreach (string s in log)
            {
                Console.WriteLine(s);
            }
            Console.Read();
        }

      
        static void WalkDirectoryTree(System.IO.DirectoryInfo root)
        {
            System.IO.FileInfo[] files = null;
            System.IO.DirectoryInfo[] subDirs = null;
            try
            {
                //GetFiles方法的參數(shù)可以包含通配符。
                //即使目錄下沒有匹配的文件,返回長(zhǎng)度為0不為空的數(shù)組對(duì)象,
                //所以遞歸函數(shù)可以放在if (files != null)里。
                //下面為查找所有有后綴名的文件。
                files = root.GetFiles("*.*");
            }
            //請(qǐng)求權(quán)限超過應(yīng)用程序提供權(quán)限拋出異常
            catch (System.UnauthorizedAccessException e)
            {
                //在訪問某個(gè)文件夾遭受拒絕時(shí),
                //您可以提升自己的權(quán)限,然后再次訪問它。
                log.Add(e.Message);
            }
            catch (System.IO.DirectoryNotFoundException e)
            {
                Console.WriteLine(e.Message);
            }

            if (files != null)
            {
                foreach (System.IO.FileInfo fi in files)
                {
                    Console.WriteLine("{0}: {1} {2}", fi.FullName, fi.Length, fi.CreationTime);
                }
                subDirs = root.GetDirectories();
                foreach (System.IO.DirectoryInfo dirInfo in subDirs)
                {
                    WalkDirectoryTree(dirInfo);
                }
            }
        }
    }

堆棧遍歷
利用泛型 Stack<T> 集合類型實(shí)現(xiàn),該類型是一個(gè)后進(jìn)先出 (LIFO) 堆棧。
復(fù)制代碼 代碼如下:

/// <summary>
    /// 通過堆棧方式訪問目錄樹
    /// </summary>
    class StackAccessDirectory
    {

        static void Main()
        {
            TraverseTree(@"C:\test");
            Console.Read();
        }

        public static void TraverseTree(string root)
        {
            Stack<string> dirs = new Stack<string>(20);
            if (!System.IO.Directory.Exists(root))
            {
                throw new ArgumentException();
            }
            dirs.Push(root);
            while (dirs.Count > 0)
            {
                string currDir = dirs.Pop();
                string[] subDirs;
                try
                {
                    subDirs = System.IO.Directory.GetDirectories(currDir);
                }
                catch (System.UnauthorizedAccessException e)
                {
                    Console.WriteLine(e.Message);
                    continue;
                }
                catch (System.IO.DirectoryNotFoundException e)
                {
                    Console.WriteLine(e.Message);
                    continue;
                }
                string[] files=null;
                try
                {
                    files=System.IO.Directory.GetFiles(currDir);
                }
                catch(System.UnauthorizedAccessException e)
                {
                    Console.WriteLine(e.Message);
                    continue;
                }
                catch(System.IO.DirectoryNotFoundException e)
                {
                    Console.WriteLine(e.Message);
                    continue;
                }
                foreach (string file in files)
                {
                    try
                    {
                        System.IO.FileInfo fi = new System.IO.FileInfo(file);
                        Console.WriteLine("{0}: {1} {2}", fi.Name, fi.Length, fi.CreationTime);
                    }
                    catch (System.IO.FileNotFoundException e)
                    {
                        Console.WriteLine(e.Message);
                        continue;
                    }
                }
                foreach (string str in subDirs)
                    dirs.Push(str);
            }
        }
    }

相關(guān)文章

  • C#異步編程之a(chǎn)sync/await詳解

    C#異步編程之a(chǎn)sync/await詳解

    異步這個(gè)概念在不同語境下有不同的解釋,不同的編程語言有不同異步編程方法,在C#語言中,常常使用async/await等關(guān)鍵字,和Task等類來實(shí)現(xiàn)異步編程。本文就來和大家聊聊async與await吧
    2023-03-03
  • c#操作iis根目錄的方法

    c#操作iis根目錄的方法

    這篇文章主要介紹了c#操作iis根目錄的方法,涉及C#針對(duì)IIS下目錄的相關(guān)操作技巧,需要的朋友可以參考下
    2015-06-06
  • C#實(shí)現(xiàn)自動(dòng)生成電子印章

    C#實(shí)現(xiàn)自動(dòng)生成電子印章

    網(wǎng)絡(luò)辦公正逐漸成為常態(tài),無紙化辦公也是一個(gè)潮流。本文將利用C#語言實(shí)現(xiàn)自動(dòng)生成電子印章功能,文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-08-08
  • C#自動(dòng)類型轉(zhuǎn)換與強(qiáng)制類型轉(zhuǎn)換的講解

    C#自動(dòng)類型轉(zhuǎn)換與強(qiáng)制類型轉(zhuǎn)換的講解

    今天小編就為大家分享一篇關(guān)于C#自動(dòng)類型轉(zhuǎn)換與強(qiáng)制類型轉(zhuǎn)換的講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • 簡(jiǎn)單的觀察者模式示例分享

    簡(jiǎn)單的觀察者模式示例分享

    這篇文章主要介紹了簡(jiǎn)單的觀察者模式示例,抽象層定義了觀察者模式,實(shí)現(xiàn)層是對(duì)抽象層的具體實(shí)現(xiàn),需要的朋友可以參考下
    2014-03-03
  • c#實(shí)現(xiàn)漢諾塔問題示例

    c#實(shí)現(xiàn)漢諾塔問題示例

    這篇文章主要介紹了c#實(shí)現(xiàn)漢諾塔問題示例,需要的朋友可以參考下
    2014-04-04
  • 解析如何正確使用SqlConnection的實(shí)現(xiàn)方法

    解析如何正確使用SqlConnection的實(shí)現(xiàn)方法

    本篇文章對(duì)如何正確使用SqlConnection的實(shí)現(xiàn)方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05
  • C#中@的用法總結(jié)

    C#中@的用法總結(jié)

    這篇文章主要介紹了C#中@的用法總結(jié),非常重要的用法總結(jié),需要的朋友可以參考下
    2014-08-08
  • C#集合之字典的用法

    C#集合之字典的用法

    這篇文章介紹了C#集合之字典的用法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-04-04
  • C#實(shí)現(xiàn)寫入與讀出文本文件的實(shí)例代碼

    C#實(shí)現(xiàn)寫入與讀出文本文件的實(shí)例代碼

    本篇文章是對(duì)使用C#實(shí)現(xiàn)寫入與讀出文本文件的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-05-05

最新評(píng)論