簡體   English   中英

我如何使該方法僅返回文件列表,而不返回目錄?

[英]How can i make the method to return a List of files only and not also directories?

在構造函數中。 filePathList是列表

filePathList = SearchAccessibleFilesNoDistinct(rootDirectory, null).ToList();

還有SearchAccessibleFilesNoDistinct方法

IEnumerable<string> SearchAccessibleFilesNoDistinct(string root, List<string> files)
        {
            if (files == null)
                files = new List<string>();
            if (Directory.Exists(root))
            {
                foreach (var file in Directory.EnumerateFiles(root))
                {
                    string ext = Path.GetExtension(file);
                    if (!files.Contains(file) && ext == textBox2.Text)
                    {
                        files.Add(file);
                    }
                }
                foreach (var subDir in Directory.EnumerateDirectories(root))
                {
                    try
                    {
                        SearchAccessibleFilesNoDistinct(subDir, files);
                        files.Add(subDir);
                    }
                    catch (UnauthorizedAccessException ex)
                    {
                        // ...
                    }
                }
            }
            return files;
        }

然后我循環遍歷列表文件

foreach (string file in filePathList)
            {
                try
                {
                    _busy.WaitOne();
                    if (worker.CancellationPending == true)
                    {
                        e.Cancel = true;
                        return;
                    }

                    bool reportedFile = false;

                    for (int i = 0; i < textToSearch.Length; i++)
                    {
                        if (File.ReadAllText(file).IndexOf(textToSearch[i], StringComparison.InvariantCultureIgnoreCase) >= 0)
                        {
                            resultsoftextfound.Add(file + "  " + textToSearch[i]);
                            if (!reportedFile)
                            {
                                numberoffiles++;
                                MyProgress myp = new MyProgress();
                                myp.Report1 = file;
                                myp.Report2 = numberoffiles.ToString();
                                myp.Report3 = textToSearch[i];
                                backgroundWorker1.ReportProgress(0, myp);
                                reportedFile = true;
                            }
                        }
                    }
                    numberofdirs++;
                    label1.Invoke((MethodInvoker)delegate
                    {
                        label1.Text = numberofdirs.ToString();
                        label1.Visible = true;
                    });
                }
                catch (Exception)
                {
                    restrictedFiles.Add(file);
                    numberofrestrictedFiles ++;
                    label11.Invoke((MethodInvoker)delegate
                    {
                        label11.Text = numberofrestrictedFiles.ToString();
                        label11.Visible = true;
                    });
                    continue;
                }

問題在於,在catch部分中,strictedFiles只是目錄而不是文件。 由於filePathList包含文件和目錄,因此當嘗試在目錄中進行搜索時,就會遇到麻煩。 這不是受限制的文件,它只是目錄,而不是文件。

這就是為什么我認為SearchAccessibleFilesNoDistinct方法應僅返回不帶目錄的文件作為項目。

例如在filePathList中,我在索引0中看到:

C:\\ TEMP

並在索引1中

C:\\ TEMP \\的help.txt

索引0中的第一項將作為限制文件進入捕獲,而第二項則不會。

您是否在尋找:

        Directory.GetFiles(rootDir,"*.*", SearchOption.AllDirectories);

改變 僅屏蔽表單文本框。

您具有以下循環來搜索搜索子目錄:

            foreach (var subDir in Directory.EnumerateDirectories(root))
            {
                try
                {
                    SearchAccessibleFilesNoDistinct(subDir, files);
                    files.Add(subDir);  <--- remove this line
                }
                catch (UnauthorizedAccessException ex)
                {
                    // ...
                }
            }

刪除將子目錄添加到文件列表的行。 我已經在上面的代碼中對其進行了標記。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM