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));
}
}
}
}
}
分享到:
相关推荐
总的来说,"Delphi多线程查找文件工具"结合了Delphi的多线程特性、文件系统操作、时间测量以及可能的通信功能,提供了一种高效且可扩展的文件查找解决方案。对于学习Delphi编程,尤其是对多线程和文件系统操作感兴趣...
以下是一个简单的多线程文件查找示例: ```csharp using System; using System.Collections.Generic; using System.IO; using System.Threading; public class MultiThreadedFileSearch { private static List...
总的来说,通过理解全盘遍历的基本原理,掌握多线程和递归算法的应用,以及结合UI反馈和线程同步技术,我们可以构建一个高效、用户友好的文件查找程序。这种能力在软件开发、系统管理、数据分析等多个领域都有重要...
vs2012写的,c# winform程序. 运用线程池写的,查找文件winform, 多线程查找文件. 可以查看当前硬盘有哪些文件,每个文件对应的文件大小.文件路径. 运用listView显示结果.listView分开显示结果信息
总之,多线程文件搜索器是通过多线程技术来加速文件查找过程的一种高效工具。在VC++环境下,利用Windows API或C++标准库实现线程创建和管理,结合合适的搜索算法和线程同步机制,可以设计出性能优秀的文件搜索解决...
在C#编程中,开发一个基于WinForms的多线程文件搜索查找应用程序是一项常见的任务,尤其是在需要快速遍历大量文件和目录时。标题中的“c#x写的多线程文件搜索查找”指的是利用C#语言的特性实现一个支持多线程的文件...
在IT领域,多线程遍历磁盘文件是一项常见的任务,尤其在大数据处理、文件管理系统以及备份恢复等场景中。本文将深入探讨如何利用多线程技术高效地遍历包括隐藏文件和系统文件在内的所有磁盘文件。 首先,我们要理解...
本文将详细解析标题为“多线程文件搜索工具 源代码”的项目,探讨如何利用多线程来实现快速的文件搜索,并针对描述中提到的“按暂停时卡死”的问题进行分析。 首先,我们要理解多线程的基本概念。在单线程程序中,...
3. **多线程文件搜索实现**:在Java、Python、C#等支持多线程的语言中,可以创建多个线程分别处理不同的文件夹。例如,在Java中,可以使用`Thread`类或`ExecutorService`来创建和管理线程。每个线程负责搜索一个或多...
在“易语言多线程读取大文本文件”这个主题中,核心概念是多线程和文件I/O操作。多线程允许程序同时执行多个独立的任务,提高效率,尤其在处理大型文件时,可以将任务分割成多个部分,由不同的线程并行处理。这可以...
易语言多线程文件搜索源码,多线程文件搜索,搜索文件,启动线程_,FindFirstFileA,FindClose,FindNextFileA,InitializeCriticalSection,EnterCriticalSection,LeaveCriticalSection,CreateThread,DeleteCriticalSection...
在"多线程文件查询"系统中,可能会有一个线程负责遍历文件系统,查找匹配查询条件的文件,而Execute方法中就包含了这部分逻辑。 提到文件查询,系统可能使用了Windows API,这是一个低级别的接口,可以直接与操作...
本话题聚焦于如何利用多线程技术来快速查找目录下的文件,这在系统管理和数据分析等场景中非常实用。 在单线程环境下,查找目录下的文件通常是顺序执行的,即逐个检查每个文件是否符合搜索条件。这种方法在文件数量...
在VC++编程环境中,实现多线程文件搜索是一项高级技术,涉及到并发处理、线程通信和同步等核心概念。下面将详细阐述这些知识点。 首先,**多线程**是现代计算机程序设计中的一种常见技术,它允许多个任务在同一时间...
本源码示例是关于如何在易语言中实现多线程读取大文本文件,这对于处理大量数据或长时间运行的任务尤其有用。以下将详细介绍这一技术及其应用。 首先,理解多线程的概念至关重要。在单线程环境中,程序按照顺序执行...
《深入解析多线程文件搜索器》 在计算机科学领域,多线程技术是一种重要的并发执行方式,尤其在处理大量I/O操作时,如文件搜索。VC6.0中的MFC(Microsoft Foundation Classes)库提供了丰富的支持来创建多线程应用...
3. **文件查找**:在Windows操作系统中,查找文件通常涉及到对文件系统目录的遍历。通过递归遍历目录结构,可以实现全盘或指定目录的文件搜索。这个功能可能使用了`FindFirstFile`,`FindNextFile`等Windows API函数...
标题 "一个用多线程实现文件查找的例子" 描述了这个项目的核心功能,即通过多线程技术来实现高效的文件查找。在这个例子中,我们将会深入理解如何在C++编程环境中利用多线程来提高文件搜索的性能。下面将详细讨论...
而多线程文件查找则打破了这种限制,它将文件系统的不同部分分配给多个线程,让它们同时进行查找,极大地提高了查找速度。这通常通过以下步骤实现: 1. **任务划分**:程序将文件系统划分为多个区域,每个区域对应...
在Windows平台上进行多文件多线程编程是一项复杂但至关重要的任务,这涉及到多个技术领域,如图形用户界面(GUI)编程、线程管理和文件操作。本项目“window多文件多线程编程”显然旨在深入实践这些技能,通过实际...