读书人

LINQ对文件目录的基本操作解决方案

发布时间: 2012-05-23 13:44:13 作者: rapoo

LINQ对文件目录的基本操作
RT,给学习LINQ的新手们一些借鉴。本文主要写了6个文件操作,代码分别贴上。
/*通过函数的形式表现出来*/

C# code
        //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             */


C# code
        //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              */


C# code
        //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*/


C# code
        //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 */ 



C# code
        //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  */


C# code
        //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            */


总结:6个文件的操作整体上比较简单,主要是结合LINQ来操作。希望共同学习。

[解决办法]

必须推荐
[解决办法]
C# code
        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的人越来越多
[解决办法]

[解决办法]
探讨
C# code

private static void FileQuery()
{
string directory = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);


var filevalues = Directory.Get……


[解决办法]
从路径字符串集合到fileinfo集合可以用select
[解决办法]


必定 火
linq

感觉 都是后半部分,用到了 Linq

有没有直接用的

[解决办法]
支持下lz,应该加精。
[解决办法]
必须推荐[b][/b]
[解决办法]
楼主牛逼 支持顶一下
[解决办法]
刚开始选修了C#,表示很多看不懂!
[解决办法]
如果基于.net4.0,要注意应该使用 DirectoryInfo.EnumerateDirectories(),DirectoryInfo.EnumerateDirectories()等。
[解决办法]
LINQ是什么东西?
[解决办法]
这个必须收藏学习
[解决办法]
支持一下...
[解决办法]
有必要学习啊。3.5 4.0
[解决办法]
对于补充自己的LINQ TO 集合还是很有帮助的;
[解决办法]
学习了,谢谢。
[解决办法]
感谢楼主分享!
收藏,学习!
[解决办法]
谢谢前辈们
[解决办法]


[解决办法]
好东西 值得看看发帖

[解决办法]
绝对要顶!太好了!
[解决办法]
看不懂
[解决办法]
好好学习天天向上
[解决办法]
谢谢,收藏了。
[解决办法]
谢谢,收藏了
[解决办法]
高手啊
[解决办法]
先顶。应该有用
[解决办法]
比较基础的东西,对新手帮助
[解决办法]
好东西!
[解决办法]

先顶。应该有用

[解决办法]
好贴 太喜欢了 谢谢楼主
[解决办法]
感谢 分享!
[解决办法]
这个可以试试
[解决办法]
没有涉及过。楼主给讲一下
[解决办法]
chu xue
[解决办法]
很好啊啊啊啊
------解决方案--------------------


这个其实还是对集合的一些操作而已,
用了linq还要分几次操作,有点繁琐
[解决办法]
像这种小技巧有时也挺有用的,
比如还可以对特定文件类型进行统计,
查找几个指定目录中是否有重复文件等
[解决办法]
支持楼主,感谢分享
[解决办法]
不错,感谢分享
[解决办法]
感谢楼主的分享。Linq看来真的很好使
[解决办法]
看来明白人越来越多了,高兴
[解决办法]
hao de hen
[解决办法]
必须推荐
[解决办法]
用Linq写的果真精简不少。。。
[解决办法]
不错,支持下
[解决办法]
谢谢分享!
[解决办法]
值得有空的时候看看
[解决办法]
谢楼主分享
[解决办法]
很好 非常哈


[解决办法]
很好的学校内容····
[解决办法]
很好,学习!
[解决办法]
很好,学习!
[解决办法]
谢谢分享,干活的时候偶尔用用linq,方便了很多
[解决办法]
linq 都几年前的东西了。
[解决办法]

谢谢了.
[解决办法]
谢谢LZ,值得收藏
[解决办法]
见识了

读书人网 >.NET

热点推荐