【原创】IComparer比较器——使编辑器CuteEditor支持按上传文件的时间排序上传文件
声明:本文系作者原创,转载请声明转自http://home.cnblogs.com/u/sunt2012/ 谢谢合作
- 需求:CuteEditor编辑器可以说是.net平台最强大,也最好用的编辑器了,尤其,其在6.4版本以后支持文件批量上传功能,让我们的编辑们更是喜欢,但是,批量上传又突出了另一个问题:由于cuteEditor没有的上传文件(以插入图片功能为例)功能,只提供了按名称和按大小排序,使编辑们上传图片之后还要去一个个找上传的文件,这给编辑们又增加了不少的工作量,所以,提出了这样的一个需求:要求我刚刚上传的文件排序在最上面。
- 分析:通过分析CuteEditor的插入图片功能的获取文件功能,可得知,CuteEditor提供了一个可覆盖的方法GetFiles,该方法要求传入一个ArrayList参数,通过往这个ArrayList里添加文件对象(FileItem)来获取已上传的文件,所以,解决排序问题的入手点就是这个ArrayList。
查看MSDN文档,ArrayList提供了三个Sort()方法,通过比较得知,Sort(IComparer)重载方法应该最为合适,但是该方法要比较元素时要使用的 IComparer 实现。FileItem没有实现这个接口,怎么办?自定义一个IComparer。 - 实现:
首先自定义一个实现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()); } }
估计这篇文件发布到首页,会被博客园管理员给踢出来,爱咋样咋样吧,这是实实在在的工作总结