LINQ的文件目录操作

      这段时间,正在学习LINQ,感觉LINQ确实简单的,操作也很方便,这篇文章主要写的是LINQ对文件目录的基本操作。虽然简单,但是同时自己同时复习了对文件类FileInfo和File的基本用法,结合了LINQ,感觉挺有意思的,给像和我一样想学习LINQ的新手们一些借鉴。

本文主要写了6个文件操作,代码分别贴上。
  /*
              -------------------------------------
                 Context:LINQ的文件目录操作
              -------------------------------------
                  Author:Chinajiyong
              -------------------------------------
                  DateTime:2012-04-20
             -------------------------------------
           */
        /*通过函数的形式表现出来*/
        //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 
           */


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




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值