using System;
using System.Collections.Generic;
using System.Text;
using System.Threading;
using System.IO;
namespace ThreadTest
{
public class FileSearch
{
private int threadCount;
object obj = new object();
private Stack<string> fileList;
private List<Thread> tlist;
private string serachStr;
private long c = 0;
public FileSearch(int theadCount, string dir, string _searchStr)
{
this.threadCount = theadCount;
fileList = new Stack<string>();
this.serachStr = _searchStr;
tlist = new List<Thread>();
string[] dirList = Directory.GetDirectories(dir);
foreach (string _dir in dirList)
{
fileList.Push(_dir);
}
SerachFile(dir);
}
public void Run()
{
if (threadCount <= 0) throw new Exception("线程数目必须大于零");
for (int i = 0; i < this.threadCount; i++)
{
Thread t = new Thread(new ThreadStart(Search));
tlist.Add(t);
t.Name = "线程" + (i + 1);
t.Start();
string str = string.Format("{0} 开始启动", t.Name);
}
}
private void Search()
{
string myStr = string.Format("{0} 进入查找............", Thread.CurrentThread.Name);
while (fileList.Count > 0)
{
string filePath = null;
lock (obj)
{
while (fileList.Count > 0)
{
filePath = fileList.Pop();
//string logInfo = string.Format("{0} 获取 目录 ", Thread.CurrentThread.Name, filePath);
break;
}
}
if (string.IsNullOrEmpty(filePath))
{
break;
}
try
{
string[] dirList = Directory.GetDirectories(filePath);
SerachFile(filePath);
if (dirList.Length > 0)
{
lock (obj)
{
foreach (string str in dirList)
{
// string logInfo = string.Format("{0} 添加 目录 ", Thread.CurrentThread.Name, str);
fileList.Push(str);
}
}
}
}
catch (Exception) { }
Thread.Sleep(1);
}
}
public void Complete()
{
foreach (Thread t in tlist)
{
t.Join();
}
Console.WriteLine("完成 共找到 " + c);
}
private void SerachFile(string filePath)
{
string[] curfileList = Directory.GetFiles(filePath);
foreach (string file in curfileList)
{
int endIndex = file.LastIndexOf('.');
int startindex = file.LastIndexOf('\\');
if (endIndex < startindex) continue;
string name = file.Substring(startindex + 1, endIndex - startindex);
if (name.IndexOf(serachStr) >= 0)
{
c++;
// Console.WriteLine(string.Format(" 找到 {0} 在文件 ", serachStr, file));
}
}
}
}
}
分享到:
相关推荐
C# 多线程查找文件,一个多线程操作很好的案例,对初学者有很大的帮助
C# 利用多线程方式 文件全盘遍历查找文件 程序生命力强 查找文件时Label动态显示正在查找的文件 文件查找速度还是蛮快的,采用递归算法 适合大家参看使用
用Delphi XE6及以上版本编译,本工具是一个利用多线程查找Windows磁盘中文件,并记录用时,一个小工具 若发现修复Bug请私信
vs2012写的,c# winform程序. 运用线程池写的,查找文件winform, 多线程查找文件. 可以查看当前硬盘有哪些文件,每个文件对应的文件大小.文件路径. 运用listView显示结果.listView分开显示结果信息
易语言多线程文件搜索源码,多线程文件搜索,搜索文件,启动线程_,FindFirstFileA,FindClose,FindNextFileA,InitializeCriticalSection,EnterCriticalSection,LeaveCriticalSection,CreateThread,DeleteCriticalSection...
文件检索的类,使用多线程查找文件,可以帮助初学者理解多线程变成,也可以理解文件的操作
多线程文件搜索工具 源代码 可以快速查找文件 vs2010编译 有个小bug 按暂停时卡死 求高手解决
易语言多线程读取大文本文件源码,多线程读取大文本文件,线程读取,WideCharToMultiByte
多线程文件搜索器非常好
一个用多线程实现文件查找的例子
在某一目录下查找 你所要查找的文件, 多线程并发,速度快
本程序用多线程对某个文件进行搜索,如果是文件就查找这个文件是否包含某个关键字,包含就输出文件名,如果不是文件,而是文件夹则再继续处理,如果是压缩文件又另外处理
VC++编写的多线程查找文件(功能增强版),很好的windows下文件查找功能软件。
1.适合新手作为起步教程,解释清晰,起步要求低,很有价值(内部包含一个压缩文件,之所以推出它,是因为这个例子不仅界面做的好,而且编码不错,值得大家参考!); 2.以前下载的时候多半要下载到很多看不了,...
利用delphi实现的多线程的文件查询系统,支持word内部查询。速度快。易使用。
用VC6.0编写的MFC多线程文件搜索器,其中用到了多线程函数、多线程退出函数以及一些API函数,(程序中搜索的文件是指文件后缀名例如:.txt)对MFC初学者和刚学习多线程的人有很大帮助,程序中如果有什么问题可以留言...
C#,多线程,搜索文件,查找文件,可以直接使用添加就ok
使用VC++多线程技术,线程通信、同步,实现对系统文件的搜索功能!!
用VC6.0编写的MFC多线程文件搜索器,其中用到了多线程函数、多线程退出函数以及一些API函数
c# 写的文件搜索查找 lstView gridView,主要是winform程序