[英]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.