第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何使用“Directory.getFiles”獲取磁盤(pán)上具有特定擴(kuò)展名的所有文件并將它們

如何使用“Directory.getFiles”獲取磁盤(pán)上具有特定擴(kuò)展名的所有文件并將它們

C#
HUWWW 2023-08-13 16:00:54
我正在做一個(gè)控制臺(tái)項(xiàng)目,其目標(biāo)是在整個(gè)磁盤(pán)中搜索擴(kuò)展名為“.config”的所有文件我嘗試過(guò)類(lèi)似的事情:foreach (string file in Directory.GetFiles("C:\\", "*.config", SearchOption.AllDirectories))  {   Console.WriteLine(file);   Console.ReadLine();}但給了我一個(gè)錯(cuò)誤“拒絕訪問(wèn)路徑(...)”。在互聯(lián)網(wǎng)上我找到了這段代碼:Stack<string> pending = new Stack<string>();        pending.Push("C:\\");        while (pending.Count != 0)        {            var path = pending.Pop();            string[] next = null;            try            {                next = Directory.GetFiles(path, "*.config");            }            catch { }            if (next != null && next.Length != 0)                foreach (var file in next)                {                    Console.WriteLine(file);                    Console.ReadLine();                }            try            {                next = Directory.GetDirectories(path);                foreach (var subdir in next) pending.Push(subdir);            }            catch { }        }但它只是顯示始終單擊“輸入”的路徑,我想將這些文件/路徑保存在列表中。有人可以幫忙嗎?
查看完整描述

3 回答

?
繁星coding

TA貢獻(xiàn)1797條經(jīng)驗(yàn) 獲得超4個(gè)贊

您可以采取兩件事來(lái)改進(jìn)該代碼:

  1. 使用Directory.EnumerateFiles()Directory.EnumerateDirectories()可以避免復(fù)制每個(gè)目錄中所有文件的名稱(chēng)。

  2. 使方法的返回類(lèi)型IEnumerable<string>更容易使用。

我們還需要非常小心由于嘗試訪問(wèn)受保護(hù)的文件和目錄而導(dǎo)致的異常。下面的代碼也很復(fù)雜,因?yàn)槟辉试S在塊yield return內(nèi)部進(jìn)行操作try/catch,因此我們必須稍微重新排列代碼。

(另請(qǐng)注意,我們必須處置從 返回的枚舉器.GetEnumerator();通常,當(dāng)您使用 時(shí),這是自動(dòng)完成的foreach,但在這種情況下我們不能 - 因?yàn)楸仨毐苊?code>yield return在 a 中執(zhí)行try/catch- 所以我們必須使用 useusing來(lái)處置它。)

以下是對(duì)原始代碼的修改:

public static IEnumerable<string> GetFiles(string root, string spec)

{

    var pending = new Stack<string>(new []{root});


    while (pending.Count > 0)

    {

        var path = pending.Pop();

        IEnumerator<string> fileIterator = null;


        try

        {

            fileIterator = Directory.EnumerateFiles(path, spec).GetEnumerator();

        }


        catch {}


        if (fileIterator != null)

        {

            using (fileIterator)

            {

                while (true)

                {

                    try

                    {

                        if (!fileIterator.MoveNext()) // Throws if file is not accessible.

                            break;

                    }


                    catch { break; }


                    yield return fileIterator.Current;

                }

            }

        }


        IEnumerator<string> dirIterator = null;


        try

        {

            dirIterator = Directory.EnumerateDirectories(path).GetEnumerator();

        }


        catch {}


        if (dirIterator != null)

        {

            using (dirIterator)

            {

                while (true)

                {

                    try

                    {

                        if (!dirIterator.MoveNext()) // Throws if directory is not accessible.

                            break;

                    }


                    catch { break; }


                    pending.Push(dirIterator.Current);

                }

            }

        }

    }

}

例如,以下是如何使用控制臺(tái)應(yīng)用程序列出“C:\”驅(qū)動(dòng)器上所有可訪問(wèn)的“.txt”文件:


static void Main()

{

    foreach (var file in GetFiles("C:\\", "*.txt"))

    {

        Console.WriteLine(file);

    }

}


查看完整回答
反對(duì) 回復(fù) 2023-08-13
?
慕的地10843

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超8個(gè)贊

更換線路

Console.WriteLine(file);
Console.ReadLine();

用一種方法將它們存儲(chǔ)在列表中。
例如

foundFiles.Add(file);

然后,當(dāng)該方法完成時(shí),您可以從此列表中讀取所有找到的文件路徑。

注意:
這不會(huì)產(chǎn)生系統(tǒng)上與過(guò)濾器匹配的所有文件。
只有您的應(yīng)用程序有權(quán)訪問(wèn)其各自目錄的文件才能通過(guò)這種方式找到。
例如,Windows目錄和其他用戶的用戶目錄通常受到保護(hù)。(假設(shè)您在 Windows 上運(yùn)行)

請(qǐng)記住,某些文件可能會(huì)獨(dú)立于其目錄而受到保護(hù)。
因此,當(dāng)嘗試讀取它們時(shí),還要考慮讀取可能會(huì)失敗的事實(shí)。
只需用 try catch 包圍讀取即可。


查看完整回答
反對(duì) 回復(fù) 2023-08-13
?
人到中年有點(diǎn)甜

TA貢獻(xiàn)1895條經(jīng)驗(yàn) 獲得超7個(gè)贊

關(guān)于錯(cuò)誤“拒絕訪問(wèn)路徑(...)”,有時(shí)您必須以管理員身份運(yùn)行 Visual Studio 才能訪問(wèn) C:\ 驅(qū)動(dòng)器中的某些文件夾。



查看完整回答
反對(duì) 回復(fù) 2023-08-13
  • 3 回答
  • 0 關(guān)注
  • 217 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢(xún)優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)