我拼湊了一些代碼,遍歷所有我的驅動器上的所有目錄,搜索符合條件的文件。我希望通過將匹配文件的文件名寫入一個簡單的Windows窗體(「textBox1.Text = fi1.FullName;」)來處理每個目錄時記錄我的搜索進度。但是隻有在搜索完成之後,表單纔會變得可見。雖然我懷疑Window窗體在搜索結束前一直處於非活動狀態(因此寫入無效),但我不確定在搜索過程中如何使窗體可見。請問是否有人可以花一點時間查看代碼並給我建議?簡單的Windows窗體不顯示
謝謝你的幫助。
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Windows.Forms;
namespace FindFiles
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
var searchPattern = ".jpg";
var matchedFiles = FindMatchingFiles(searchPattern);
}
private List<string> FindMatchingFiles(string searchPattern)
{
var l = new List<string>();
var allDrives = DriveInfo.GetDrives();
foreach (var d in allDrives.Where(d => d.IsReady))
{
foreach (var file in GetFiles(d.Name))
{
if (!file.EndsWith(searchPattern)) continue;
var fi1 = new FileInfo(file);
textBox1.Text = fi1.FullName;
l.Add(file);
}
}
return l;
}
static IEnumerable<string> GetFiles(string path)
{
var queue = new Queue<string>();
queue.Enqueue(path);
while (queue.Count > 0)
{
path = queue.Dequeue();
try
{
foreach (var subDir in Directory.GetDirectories(path))
{
queue.Enqueue(subDir);
}
}
catch (UnauthorizedAccessException) { }
string[] files = null;
try { files = Directory.GetFiles(path); }
catch (UnauthorizedAccessException) { }
if (files == null) continue;
foreach (var t in files) { yield return t; }
}
}
}
}
https://msdn.microsoft.com/en-gb/library/cc221403(v=vs.95).aspx可能會有幫助。 –
完美的解決方案JSR。謝謝。 – Bill