本博文接着上几篇LINQ to Object和多线程的相关博文,用LINQ to Object和多线程实现文件查找与分组的Demo作为LINQ to Object 的一个小结。

程序的功能如下:点击界面右上角按钮选择一个文件夹,多线程加载文件,LINQ进行相关的查询,实现分组查找等功能。

程序的注释中,DebugLZQ加入了很详细的注释,以及,LZ代码写作的流程,因此这里不做更多的介绍,LINQ和多线程的相关技能请参考DebugLZQ前面的几篇博文。

代码如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using System.IO;///
///DebugLZQ
///http://www.cnblogs.com/DebugLZQ
///LINQ to Object & 线程操作
namespace 文件查找与分组
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private string filePath = "";/
        //a4//得到选定目录下的文件类型private string[] GetFileTypes(){string[] files = Directory.GetFiles(filePath, "*.*", SearchOption.AllDirectories);//获得目录下所有的文件//LINQ获得文件分组var filesLookup = files.ToLookup(f=>f.Substring(f.LastIndexOf('.')).ToUpper());//从分组中获得Key(即文件类型),并排序var fileTypes = from t in filesLookuporderby t.Keyselect t.Key;return fileTypes.ToArray();}////b6//根据指定类型获得文件名private string[] GetFilesByType(string type){string[] files = Directory.GetFiles(filePath, "*.*", SearchOption.AllDirectories);//获得目录下所有的文件var filesByType = from f in fileswhere f.Contains(type.ToLower())||f.Contains(type)select f;return filesByType.ToArray();}////c8//查找文件private string[] FindFile(string str){string[] files = Directory.GetFiles(filePath, "*.*", SearchOption.AllDirectories);//获得目录下所有的文件var filesTake = from f in fileswhere f.Contains(str)select f;return filesTake.ToArray();}//////a2//访问磁盘,读取文件private void LoadFile(){Thread t = new Thread(new ThreadStart(loadfile));t.Start();           }private delegate void loadfileDelegate();//a3private void loadfile(){if (this.InvokeRequired == true)//注意这里
            {loadfileDelegate lfd = new loadfileDelegate(loadfile);this.Invoke(lfd);return;}//获得文件类型string[] fileTypes = GetFileTypes();//BindingfileTypeLst.DataSource = fileTypes;}//a1private void btnSelDir_Click(object sender, EventArgs e){if (folderBrowserDialog1.ShowDialog()== System.Windows.Forms.DialogResult.OK ){filePath = folderBrowserDialog1.SelectedPath;txtFolder.Text = folderBrowserDialog1.SelectedPath;LoadFile();}}//b5private void fileTypeLst_SelectedIndexChanged(object sender, EventArgs e){//根据文件类型获得文件名string[] files = GetFilesByType(fileTypeLst.SelectedItem.ToString());//BindingfileLst.DataSource = files;}//c7private void txtFind_TextChanged(object sender, EventArgs e){if (txtFind.Text.Length == 0){return;}string[] files = FindFile(txtFind.Text);//BindingfileLst.DataSource = files;}}
}

程序的界面,及运行结果如下:

转载于:https://www.cnblogs.com/DebugLZQ/archive/2012/11/13/2767717.html

LINQ to Objects和多线程实现文件查找与分组相关推荐

  1. C/C++线程与多线程工作笔记0007---单线程实现文件查找系统

    技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 用单线程实现文件查找系统 创建一个MFC应用

  2. 【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第三章 (LINQ TO Objects) 第一节

    LINQ到Objects LINQ到Objects介绍 示例 3-1. 一个LINQ到Objects查询的示例. string[] presidents = {     "Adams&quo ...

  3. 从LINQ开始之LINQ to Objects(上)

    LINQ概述 LINQ,语言集成查询(Language Integrated Query),它允许使用C#或VB代码以查询数据库相同的方式来操作不同的数据源. LINQ体系结构 从上图可以看出,LIN ...

  4. 查询表达式和LINQ to Objects

    查询表达式实际上是由编译器"预处理"为"普通"的C#代码,接着以完全普通的方式进行编译.这种巧妙的发式将查询集合到了语言中,而无须把语义改得乱七八糟 LINQ的 ...

  5. C# 多线程下载文件功能实现,优化文件下载不全问题

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...

  6. 【Note4】网络,并发/IO,内存,linux/vi命令,正则,Hash,iNode,文件查找与读取

    文章目录 1.局域网:CSMA/CD 2.互联网:ARP,DHCP,NAT 3.TCP协议:telnet,tcpdump,syn/accept队列 4.HTTPS协议:摘要(sha.md5.crc). ...

  7. Centos7 文件查找配置项(FZF命令)

    Centos7 文件查找配置项(FZF命令) GITHUB镜像站 FastGit镜像站文档 1.通过插件管理器安装fzf,nerdtree # 1.安装vim插件管理器(vim-plug) curl ...

  8. linux 文件查找与文件中注释去除

    文件查找 / 查找的文件夹名(/ 从根下查找) find / -name filename 文件中的注释去除 示例文件 使用grep -v "^#" 来去掉注释行,其中:-v 就是 ...

  9. Linux找头文件规则,linux 头文件、库文件查找顺序

    linux 头文件.库文件查找顺序 默认分类 2009-11-14 01:24:28 阅读126 评论0 字号:大中小 linux 头文件.库文件查找顺序 2009-11-03 12:36 Inclu ...

  10. VC 文件操作(文件查找,打开/保存,读/写,复制/删除/重命名)

    右击项目->属性->字符集:使用多字节字符集. 这样可以使用char到CString的转化. char sRead[20] = ""; CString strtest ...

最新文章

  1. 通过阿里云容器镜像服务海外服务器构建spark-operator镜像
  2. 给Arm生态添把火,腾讯Kona JDK Arm架构优化实践
  3. 真不是炼丹,务实敢为的 MoCo v3
  4. ubuntu14安装tensorflow并测试
  5. Ghost本地安装highlight.js使代码高亮
  6. 从贝叶斯定理到模糊动态贝叶斯网络
  7. SQL Bulk Insert
  8. 如何高效开发一款微信小程序
  9. 最经典的人生定律、法则、效应总结
  10. 简单模仿赛尔号哈莫雷特对战谱尼最难打的第五条命
  11. 通过多视图信息瓶颈学习鲁棒表征
  12. 移位加密字母C语言,替代密码和置换密码地C语言实现
  13. 关于IAP支付,谷歌和苹果订阅商品——最白话,手把手教你做系列。
  14. stata实现经济生态的空间杜宾模型
  15. Flying Squirrel Creek
  16. Java并发编程的艺术笔记-Java内存模型
  17. 图像数据标准化与归一化
  18. Mindjet MindManager 2021中文版注册序列号
  19. Python3安装turtle库
  20. 移动端携程网首页制作

热门文章

  1. jzoj3348. 【NOI2013模拟】秘密任务
  2. Django中的富文本编辑器的使用
  3. Python基础【day03】:文件操作(七)
  4. Mysql基于Linux上的安装
  5. 不断被刷新的未来——读文档有感
  6. 网络爬虫与HTTP协议
  7. C语言测试:想成为嵌入式程序员应知道的0x10个基本问题
  8. C#设计模式(11)-Composite Pattern
  9. Docker 多模块打包启动(kitty-generator)
  10. Java 需要转义的字符以及json字符串的转义