【原创】IComparer比较器——使编辑器CuteEditor支持按上传文件的时间排序上传文件

声明:本文系作者原创,转载请声明转自http://home.cnblogs.com/u/sunt2012/ 谢谢合作

  1. 需求:CuteEditor编辑器可以说是.net平台最强大,也最好用的编辑器了,尤其,其在6.4版本以后支持文件批量上传功能,让我们的编辑们更是喜欢,但是,批量上传又突出了另一个问题:由于cuteEditor没有的上传文件(以插入图片功能为例)功能,只提供了按名称和按大小排序,使编辑们上传图片之后还要去一个个找上传的文件,这给编辑们又增加了不少的工作量,所以,提出了这样的一个需求:要求我刚刚上传的文件排序在最上面。
  2. 分析:通过分析CuteEditor的插入图片功能的获取文件功能,可得知,CuteEditor提供了一个可覆盖的方法GetFiles,该方法要求传入一个ArrayList参数,通过往这个ArrayList里添加文件对象(FileItem)来获取已上传的文件,所以,解决排序问题的入手点就是这个ArrayList。
         查看MSDN文档,ArrayList提供了三个Sort()方法,通过比较得知,Sort(IComparer)重载方法应该最为合适,但是该方法要比较元素时要使用的 IComparer 实现。FileItem没有实现这个接口,怎么办?自定义一个IComparer。
  3. 实现

            首先自定义一个实现IComparer接口的类MyComparer,并实现IComparer的方法Compare(object x,object y);该方法的实现当x<y时返回1,当x   >y时返回-1,x=y是返回0,而对象MyComparer,x,y都是FileItem的类型,所以他们的比较就是上传时间的比较,代码如下:

public class Mycomparator : IComparer
            {

                #region IComparer 成员

                public int Compare(object x, object y)
                {
                    CuteEditor.Impl.FileItem e1 = (CuteEditor.Impl.FileItem)x;
                    CuteEditor.Impl.FileItem e2 = (CuteEditor.Impl.FileItem)y;
                    if (e1.LastWriteTime < e2.LastWriteTime)
                    {
                        return 1;
                    }
                    if (e1.LastWriteTime > e2.LastWriteTime)
                    {
                        return -1;
                    }
                    else
                    {
                        return 0;
                    }
                }

                #endregion
            }

           然后,再在GetFiles中调用files.Sort(new Mycomparator());,如下

protected override void GetFiles(ArrayList files)
            {
                //不加载第一级文件夹的文件
                if (fs.VirtualRoot.Equals(CurrentDirectory))
                {
                    return;
                }
                foreach (string ext in secset.ImageFilters)
                {
                    if (ext == null || ext.Length == 0) continue;
                    
                    files.AddRange(fs.GetFileItems(CurrentDirectory, secset.FileNamePrefix + "*" + ext));
                    files.Sort(new Mycomparator());
                }
                
            }

估计这篇文件发布到首页,会被博客园管理员给踢出来,爱咋样咋样吧,这是实实在在的工作总结

posted @ 2012-09-19 17:29  finding_job-sunt  阅读(1313)  评论(0编辑  收藏  举报