110,533
社区成员
发帖
与我相关
我的任务
分享
string[] files = System.IO.Directory.GetFiles("F:\\", "*.xls", SearchOption.AllDirectories);
#Region " - 线程处理"
Private _t As Thread
Private Event event_thread_end(ByVal file_info_list() As FileInfo)
Private Sub background_process(ByVal directory_info As DirectoryInfo)
Dim di As DirectoryInfo
Dim directory_name As String
Dim fi As FileInfo
Dim fi_list() As FileInfo
Dim full_file_name As String
full_file_name = "E:\madaming\Download\m00000001.jpg" '
fi = New FileInfo(full_file_name)
directory_name = fi.DirectoryName
di = New DirectoryInfo(directory_name)
Try
fi_list = di.GetFiles()
System.Threading.Thread.Sleep(1000)
RaiseEvent event_thread_end(fi_list)
Catch ex As Exception
RaiseEvent event_thread_exception(ex.Message)
End Try
End Sub
Private Sub Button_start_thread_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_start_thread.Click
_t = New Thread(AddressOf background_process)
_t.Start()
End Sub
''''''''
...
Private Sub Button_StopThread_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button_StopThread.Click
_t.Abort()
End Sub
#End Region
public partial class frmMain : Form
{
/// <summary>
/// 路径
/// </summary>
private string m_path;
/// <summary>
/// 扩展名
/// </summary>
private string m_ext;
/// <summary>
/// 文件总数量
/// </summary>
private int m_filesCount;
/// <summary>
/// 后台线程
/// </summary>
private BackgroundWorker m_bgworker = null;
/// <summary>
/// 目录信息
/// </summary>
private DirectoryInfo m_dirInfo = null;
private List<string> m_FileNames = new List<string>();
public frmMain()
{
InitializeComponent();
}
private void btnOpenPath_Click(object sender, EventArgs e)
{
FolderBrowserDialog _fbd = new FolderBrowserDialog();
_fbd.ShowNewFolderButton = false;
if (_fbd.ShowDialog(this) == DialogResult.OK)
{
txtPath.Text = _fbd.SelectedPath;
}
}
private void btnProcess_Click(object sender, EventArgs e)
{
m_FileNames.Clear();
rtxtResult.Text = "";
m_path = txtPath.Text;
m_ext = txtExt.Text;
m_filesCount = 0;
m_bgworker = new BackgroundWorker();
m_bgworker.WorkerReportsProgress = true;
m_bgworker.WorkerSupportsCancellation = true;
m_bgworker.DoWork += new DoWorkEventHandler(DoWork);
m_bgworker.ProgressChanged += new ProgressChangedEventHandler(ReportProgress);
m_bgworker.RunWorkerCompleted+=new RunWorkerCompletedEventHandler(RunWorkerCompleted);
m_bgworker.RunWorkerAsync();
}
private void DoWork(object sender, DoWorkEventArgs dwea)
{
BackgroundWorker _worker = sender as BackgroundWorker;
ErgodicFile(_worker, m_path, m_ext);
}
/// <summary>
/// 遍历指定路径下所有指定扩展名的文件
/// </summary>
/// <param name="path">指定路径</param>
/// <param name="ext">文件扩展名,不包含分隔符(.)</param>
/// <returns>返回所有文件绝对路径</returns>
private void ErgodicFile(BackgroundWorker worker, string path, string extension)
{
if (worker.CancellationPending)
{
return;
}
Thread.Sleep(10);
FileSystemInfo[] _fsi = null;
try
{
m_dirInfo = new DirectoryInfo(path);
_fsi = m_dirInfo.GetFileSystemInfos();
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
return;
}
FileInfo _fi;
try
{
for (int i = 0; i < _fsi.Length && !worker.CancellationPending; i++)
{
if (!Directory.Exists(_fsi[i].FullName))
{//是文件
_fi = new FileInfo(_fsi[i].FullName);
//判断文件扩展名
if (m_ext.Length > 0)
{//要求扩展名
if (_fi.Extension == m_ext)
{
m_filesCount++;
worker.ReportProgress(0, _fi.FullName);
m_FileNames.Add(_fi.FullName);
Thread.Sleep(10);
}
}
else
{
worker.ReportProgress(0, _fi.FullName);
m_FileNames.Add(_fi.FullName);
Thread.Sleep(10);
}
}
else
{//是目录,继续遍历
ErgodicFile(worker, _fsi[i].FullName, extension);
Thread.Sleep(10);
}
Thread.Sleep(10);
}
Thread.Sleep(10);
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
private void RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
if(DialogResult.OK==MessageBox.Show("扫描完成,共找到"+m_FileNames.Count+"个文件,点击确定查看","文件扫描完成",MessageBoxButtons.OKCancel))
{}
}
private void ReportProgress(object sender, ProgressChangedEventArgs e)
{
string _fileName = e.UserState.ToString();
rtxtResult.AppendText(_fileName + System.Environment.NewLine);
rtxtResult.ScrollToCaret();
lblCount.Text = rtxtResult.Lines.Length.ToString();
}
private void btnStop_Click(object sender, EventArgs e)
{
if (m_bgworker != null && m_bgworker.WorkerSupportsCancellation)
{
m_bgworker.CancelAsync();
}
}
private void btnStart_Click(object sender, EventArgs e)
{
btnStart.Enabled = false;
if (m_FileNames != null && m_FileNames.Count > 0)
{
frmFileRead _frm = new frmFileRead(m_FileNames);
_frm.ShowDialog(this);
}
btnStart.Enabled = true;
}
}