LINQ对文件目录的基本操作
RT,给学习LINQ的新手们一些借鉴。本文主要写了6个文件操作,代码分别贴上。
/*通过函数的形式表现出来*/
//1、查询指定名称的文件 private static void FileQuery() { ///获取"我的文档"的路径 string directory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); List<FileInfo> files = new List<FileInfo>(); ///获取文件列表信息 foreach (var file in Directory.GetFiles(directory)) { files.Add(new FileInfo(file)); } ///查询文件列表信息 var filevalues = from file in files where file.Extension == ".pdf" && file.Name.IndexOf("报告") > -1 orderby file.Name select file; ///显示查询结果 foreach (var f in filevalues) { Console.WriteLine(f.Name); } } //运行结果: /* 个人述职报告.pdf 个人述职报告-96.pdf WPF程序设计指南(有书).pdf */ //2、查询指定扩展名的文件 private static void FileExtensionsQuery() { ///获取"我的文档"的路径 string directory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); List<FileInfo> files = new List<FileInfo>(); ///获取文件列表信息 foreach (var file in Directory.GetFiles(directory)) { files.Add(new FileInfo(file)); } ///按文件扩展名分组 var fExtensions = from fe in files group fe by fe.Extension into g orderby g.Key select g; ///显示查询结果 foreach (var f in fExtensions) { foreach (var fi in f) { Console.WriteLine(fi.Name); } } } //运行结果: /* desktop.ini 个人述职报告.pdf 个人述职报告-96.pdf WPF程序设计指南(有书).pdf 1.png 个人述职报告.txt */ //3、查询指定属性的文件 private static void FileAttributeQuery() { ///获取"我的文档"的路径 string directory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); ///获取文件信息 List<FileInfo> files = new List<FileInfo>(); ///获取文件列表信息 foreach (var file in Directory.GetFiles(directory)) { files.Add(new FileInfo(file)); } //根据文件大小(大于1M小于4M)查询文件,并进行分组排序, var fAttribute = from fa in files where fa.Length >= 1024 * 1024 && fa.Length <= 4096 * 1024 orderby fa.Name select fa; ///显示查询结果 foreach (var fa in fAttribute) { Console.WriteLine(fa.Name); } }//运行结果:/*WPF程序设计指南(有书).pdf*/ //4、统计文件夹的大小 private static void FileSizeQuery() { ///获取"我的文档"的路径 string directory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); ///获取文件信息 List<FileInfo> files = new List<FileInfo>(); ///获取文件列表信息 foreach (var file in Directory.GetFiles(directory)) { files.Add(new FileInfo(file)); } //搜索文件的大小 var fSize = from fs in files select fs.Length; ///对文件大小求和 long size = fSize.Sum(); ///显示查询结果 Console.WriteLine(size.ToString()); }//运行结果:/* 10786712 */
//5、比较两个文件夹是否存在同名文件 private static void FileCompareQuery() { ///获取"我的文档"的路径 string directoryA = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); ///获取"我的图片"的路径 string directoryB = Environment.GetFolderPath(Environment.SpecialFolder.MyPictures); ///获取我的文档的文件信息 List<FileInfo> filesA = new List<FileInfo>(); ///获取我的图片的文件信息 List<FileInfo> filesB = new List<FileInfo>(); ///获取我的文档文件列表信息 foreach (var file in Directory.GetFiles(directoryA)) { filesA.Add(new FileInfo(file)); } ///获取我的图片文件列表信息 foreach (var file in Directory.GetFiles(directoryB)) { filesB.Add(new FileInfo(file)); } ///查询同名文件 var fSameFile = from fA in filesA join fB in filesB on fA.Name equals fB.Name orderby fA.Name select fA; ///显示查询结果 foreach (var fsf in fSameFile) { Console.WriteLine(fsf.Name); } }运行结果:/* 1.png */ //6、查询包含指定文件内容的txt文档 private static void FileExtensionsTextQuery() { ///获取"我的文档"的路径 string directory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); List<FileInfo> files = new List<FileInfo>(); ///获取文件列表信息 foreach (var file in Directory.GetFiles(directory)) { files.Add(new FileInfo(file)); } string FindString = "我相信自己"; ///按文件扩展名分组 var fExtensionsText = from fetq in files where fetq.Extension == ".txt" let content = File.ReadAllText(fetq.FullName, System.Text.Encoding.GetEncoding("gb2312")) where content.Contains(FindString) == true orderby fetq.Name select fetq; ///显示查询结果 foreach (var f in fExtensionsText) { Console.WriteLine(f.Name); } } //运行结果: /* 个人述职报告.txt */ private static void FileQuery() { string directory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); var filevalues = Directory.GetFiles(directory) .Select(file=>new FileInfo(file)) .Where(file=> file.Extension.ToLower() == ".pdf" && file.Name.Contains("报告") ) .OrderBy(file=>file.Name) .ToList(); filevalues.ForEach(f=>Console.WriteLine(f.Name)); }//抛砖引玉,觉得这样简化一下会更优雅一些//Very Happy 看到论坛使用和讨论LINQ的人越来越多
[解决办法]
[解决办法]