LINQ to Objects和多线程实现文件查找与分组
本博文接着上几篇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和多线程实现文件查找与分组相关推荐
- C/C++线程与多线程工作笔记0007---单线程实现文件查找系统
技术交流QQ群[JAVA,C++,Python,.NET,BigData,AI]:170933152 用单线程实现文件查找系统 创建一个MFC应用
- 【翻译】Pro LINQ Language Integrated Query in C# 2008 -- 第三章 (LINQ TO Objects) 第一节
LINQ到Objects LINQ到Objects介绍 示例 3-1. 一个LINQ到Objects查询的示例. string[] presidents = { "Adams&quo ...
- 从LINQ开始之LINQ to Objects(上)
LINQ概述 LINQ,语言集成查询(Language Integrated Query),它允许使用C#或VB代码以查询数据库相同的方式来操作不同的数据源. LINQ体系结构 从上图可以看出,LIN ...
- 查询表达式和LINQ to Objects
查询表达式实际上是由编译器"预处理"为"普通"的C#代码,接着以完全普通的方式进行编译.这种巧妙的发式将查询集合到了语言中,而无须把语义改得乱七八糟 LINQ的 ...
- C# 多线程下载文件功能实现,优化文件下载不全问题
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.I ...
- 【Note4】网络,并发/IO,内存,linux/vi命令,正则,Hash,iNode,文件查找与读取
文章目录 1.局域网:CSMA/CD 2.互联网:ARP,DHCP,NAT 3.TCP协议:telnet,tcpdump,syn/accept队列 4.HTTPS协议:摘要(sha.md5.crc). ...
- Centos7 文件查找配置项(FZF命令)
Centos7 文件查找配置项(FZF命令) GITHUB镜像站 FastGit镜像站文档 1.通过插件管理器安装fzf,nerdtree # 1.安装vim插件管理器(vim-plug) curl ...
- linux 文件查找与文件中注释去除
文件查找 / 查找的文件夹名(/ 从根下查找) find / -name filename 文件中的注释去除 示例文件 使用grep -v "^#" 来去掉注释行,其中:-v 就是 ...
- Linux找头文件规则,linux 头文件、库文件查找顺序
linux 头文件.库文件查找顺序 默认分类 2009-11-14 01:24:28 阅读126 评论0 字号:大中小 linux 头文件.库文件查找顺序 2009-11-03 12:36 Inclu ...
- VC 文件操作(文件查找,打开/保存,读/写,复制/删除/重命名)
右击项目->属性->字符集:使用多字节字符集. 这样可以使用char到CString的转化. char sRead[20] = ""; CString strtest ...
最新文章
- 通过阿里云容器镜像服务海外服务器构建spark-operator镜像
- 给Arm生态添把火,腾讯Kona JDK Arm架构优化实践
- 真不是炼丹,务实敢为的 MoCo v3
- ubuntu14安装tensorflow并测试
- Ghost本地安装highlight.js使代码高亮
- 从贝叶斯定理到模糊动态贝叶斯网络
- SQL Bulk Insert
- 如何高效开发一款微信小程序
- 最经典的人生定律、法则、效应总结
- 简单模仿赛尔号哈莫雷特对战谱尼最难打的第五条命
- 通过多视图信息瓶颈学习鲁棒表征
- 移位加密字母C语言,替代密码和置换密码地C语言实现
- 关于IAP支付,谷歌和苹果订阅商品——最白话,手把手教你做系列。
- stata实现经济生态的空间杜宾模型
- Flying Squirrel Creek
- Java并发编程的艺术笔记-Java内存模型
- 图像数据标准化与归一化
- Mindjet MindManager 2021中文版注册序列号
- Python3安装turtle库
- 移动端携程网首页制作