C#字符串数组的orderby排列方法及其在文件操作中的应用

版权声明:未经博主允许请勿转载 https://blog.csdn.net/qq_39040135/article/details/82955240

C#字符串数组的orderby排列方法及其在文件操作中的应用

        /// <summary>
        /// 按文件名中包含的日期字符串进行文件排序与筛选(日期只是一个样例,该方法的思路可以帮助应用到你的方法中)
        /// </summary>
        /// <param name="filenames"></param> 待处理文件的集合,集合中每一个元素都是一个文件的完整路径
        /// <param name="Dstart"></param> 要筛选的日期的开始时间,我用的格式为"yyyyMMdd"
        /// <param name="Dend"></param>要筛选的日期的结束时间,我用的格式为"yyyyMMdd"
        /// <param name="LastTo"></param> 文件名中从后向前,文件中包含日期字符串的头部的index
        /// <param name="SelectLength"></param>文件中包含的要排序和筛选的日期字符串的长度
        /// <returns></returns> 返还一个自定义的结构体,其中包含了按日期区间筛选处理后的文件流,和从原文件数组中筛选出的日期信息
        
        public struct dateorder
        {
            public string[] filenames;
            public string date;

        }
        public struct filewithdate
        {
            public string filename;
            public string filedate;
        }
        public static dateorder FileSelectByName(string[] filenames, string Dstart, string Dend,int LastTo,int SelectLength)  
        {
                dateorder FileTool = new dateorder();
                FileTool.date = "";
                filewithdate[] files = new filewithdate[filenames.Length]; int num = 0;
                foreach (string file in filenames)
                {
                    FileInfo fi = new FileInfo(file);
                    files[num].filename = file; 
                    files[num].filedate = fi.Name.Replace(fi.Extension, "").Substring(fi.Name.Replace(fi.Extension, "").Length - LastTo, SelectLength); num++;
                }
                //定义var强类型容器,盛放待排序和操作的字符串
                var DateOrder = from fileschild in files //历遍待处理文件数组中的文件                                     
                                orderby fileschild.filedate//orderby排序的条件是filechild.filedate
                                select fileschild;//选择导出到DateOrder容器中的数据是 filechild

                int times = filenames.Length;
                ArrayList resultlist = new ArrayList();
                //强类型必须使用foreach历遍容器中的元素,如List<>\var\ArrayList<>等
                foreach (filewithdate s in DateOrder)//按指定的日期区间筛选文件
                {
                    int derstrat = string.Compare(s.filedate, Dstart);
                    int derend = string.Compare(s.filedate, Dend);
                    if (derstrat >= 0 && derend <= 0)
                    {
                        resultlist.Add(s.filename);
                    }
                }
                FileTool.filenames = (string[])resultlist.ToArray(typeof(string));
                if (FileTool.filenames.Length != 0 && !Array.Exists(FileTool.filenames, string.IsNullOrEmpty))
                {
                    FileInfo fs = new FileInfo(FileTool.filenames[0]); FileInfo fs_last = new FileInfo(FileTool.filenames[FileTool.filenames.Length - 1]);
                    FileTool.date = fs.Name.Replace(fs.Extension, "").Substring(fs.Name.Replace(fs.Extension, "").Length - LastTo, SelectLength) + "_" + fs_last.Name.Replace(fs_last.Extension, "").Substring(fs_last.Name.Replace(fs_last.Extension, "").Length - LastTo, SelectLength);
                }
                return FileTool;
        }
       
        /// <summary>
        /// 文件按创建日期筛选器
        这是一个将输入的文件流按文件的创建时间筛选的方法,其原理和算法与上一个方法异曲同工。
        /// </summary>
        /// <param name="filenames"></param>
        /// <param name="Dstart"></param>
        /// <param name="Dend"></param>
        /// <returns></returns>
        public static string[] FileSelectByCreationDate(string[] filenames, string Dstart, string Dend)
        {
            IEnumerable filelist = filenames.Where(p => File.GetCreationTime(p) >= DateTime.Parse(Dstart) && File.GetCreationTime(p) <= DateTime.Parse(Dend));
            ArrayList files = new ArrayList();
            foreach (string filename in filelist)
            {
                files.Add(filename);
            }
            string[] s = new string[files.Count];
            files.CopyTo(s);
            return s;
        }
        
         /// <summary>
     /// 合并文件
     /// </summary>
     /// <param name="Source"></param>//源文件的存放目录
     /// <param name="patterns"></param>//待查找文件的类型"*.txt"等,详见Directory.GetFiles()方法
     /// <returns></returns>
        public static string[] MergeFilenames(string Source, string[] patterns)
        {
 
            ArrayList filenames_ = new ArrayList();
                foreach (string pattern in patterns)
                {
                    filenames_.AddRange(Directory.GetFiles(Source, pattern, SearchOption.AllDirectories));
                }
            string[] filenames = (string[])filenames_.ToArray(typeof(string));
            return filenames;

        }
         /// <summary>
        /// 按创建日期的多文件合并排序与筛选方法
        /// </summary>
        /// <param name="Source"></param>
        /// <param name="patterns"></param>
        /// <param name="Dstart"></param>
        /// <param name="Dend"></param>
        /// <returns></returns>
        public static string[] FileWithCreationDate(string Source, string[] patterns, string Dstart, string Dend)
        {
            string[] filenames ={};
            filenames = MergeFilenames(Source, patterns);

            if (!FilesJudge(Source)) return filenames;

            string[] resultfilenames ={};
            if (Array.Exists(filenames, string.IsNullOrEmpty))
            {
                filenames = fileoperation.FileSelectByCreationDate(filenames, Dstart, Dend);   
                ArrayList boottle = new ArrayList();
                foreach (string file in filenames)
                {
                    FileInfo fi = new FileInfo(file);
                    boottle.Add(fi.Name.ToString()+"\t"+fi.CreationTime.ToString("yyyy-MM-dd"));
                }
                resultfilenames = (string[])boottle.ToArray(typeof(string));

            }
            return resultfilenames;
        }
        
        /// <summary>
        /// 字符串数组合并方法
        附上可能需要用到的方法
/// </summary>
/// <param name="str1[]"></param>
/// <param name="str2[]"></param>
/// <returns></returns>
        public static string[] StrsExtension(string[] str1,string[] str2)
        {
            ArrayList str = new ArrayList();
            str.AddRange(str1);
            str.AddRange(str2);
            string[] resultstr = (string[])str.ToArray(typeof(string));
            return resultstr;
        }
        

猜你喜欢

转载自blog.csdn.net/qq_39040135/article/details/82955240
今日推荐