使用Directory.GetFiles,如何按文件名分别进行升序或降序排序?请帮帮我,谢谢。
使用Directory.GetFiles,如何按文件名分别进行升序或降序排序?
string[] files=Directory.GetFiles(@Server.MapPath("./upload/"));
我得到的结果并不是按汉语拼音排列的,也无法按升序或降序排列。
请帮帮我,谢谢。
问题点数:50、回复次数:10Top
1 楼wtoeb(FAQC.COM)回复于 2005-06-15 22:45:24 得分 0
例子可见:www.loveshe.com。
左边最新的列表是按文件建立的时间来排序的。
中间这个没有进行排序处理。
谢谢。Top
2 楼saucer(思归)回复于 2005-06-15 22:50:13 得分 45
write a IComparer, for example
using System;
using System.Collections;
using System.IO;
class SortFile : IComparer
{
int IComparer.Compare(object a, object b)
{
FileInfo fa = (FileInfo)a;
FileInfo fb = (FileInfo)b;
//order by LastWriteTime DESC
if (fa.LastWriteTime < fb.LastWriteTime)
return 1;
if (fa.LastWriteTime > fb.LastWriteTime)
return -1;
return 0;
}
public static void Main()
{
string sDir = @"d:\labs\aspnet";
DirectoryInfo di = new DirectoryInfo(sDir);
FileInfo[] fis = di.GetFiles();
foreach (FileInfo fi in fis)
Console.WriteLine("{0}, {1}", fi.Name, fi.LastWriteTime);
Array.Sort(fis, new SortFile());
foreach (FileInfo fi in fis)
Console.WriteLine("{0}, {1}", fi.Name, fi.LastWriteTime);
}
}Top
3 楼wtoeb(FAQC.COM)回复于 2005-06-15 23:00:00 得分 0
saucer(思归):
大哥,我是想分别用:
1、按文件名来进行升序或降序排列(未解决);
2、按扩展名来进行升序或降序排列(未解决);
3、按创建时间来进行升序或降序排列(已解决)。
谢谢。Top
4 楼saucer(思归)回复于 2005-06-15 23:14:38 得分 0
using System;
using System.Collections;
using System.IO;
public enum SortOption
{
FileName,
Extension,
CreationTime
}
class SortFile : IComparer
{
SortOption mso;
public SortFile(SortOption so)
{
mso = so;
}
int IComparer.Compare(object a, object b)
{
FileInfo fa = (FileInfo)a;
FileInfo fb = (FileInfo)b;
switch (mso)
{
case SortOption.FileName:
return String.Compare(fa.Name, fb.Name, true);
break;
case SortOption.Extension:
return String.Compare(Path.GetExtension(fa.Name), Path.GetExtension(fb.Name), true);
break;
case SortOption.CreationTime:
return DateTime.Compare(fa.CreationTime, fb.CreationTime);
break;
default:
break;
}
return 0;
}
public static void Main()
{
string sDir = @"e:\labs\csdn";
DirectoryInfo di = new DirectoryInfo(sDir);
FileInfo[] fis = di.GetFiles();
foreach (FileInfo fi in fis)
Console.WriteLine("{0}, {1}", fi.Name, fi.CreationTime);
Array.Sort(fis, new SortFile(SortOption.FileName));
foreach (FileInfo fi in fis)
Console.WriteLine("{0}, {1}", fi.Name, fi.CreationTime);
Array.Sort(fis, new SortFile(SortOption.Extension));
foreach (FileInfo fi in fis)
Console.WriteLine("{0}, {1}", fi.Name, fi.CreationTime);
Array.Sort(fis, new SortFile(SortOption.CreationTime));
foreach (FileInfo fi in fis)
Console.WriteLine("{0}, {1}", fi.Name, fi.CreationTime);
}
}
Top
5 楼wtoeb(FAQC.COM)回复于 2005-06-16 00:05:17 得分 0
不好意思,搞了半天,不知道怎么转成WEB的。Top
6 楼wtoeb(FAQC.COM)回复于 2005-06-16 00:20:20 得分 0
提示信息如下:
指定的转换无效。
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
异常详细信息: System.InvalidCastException: 指定的转换无效。
源错误:
行 153: int IComparer.Compare(object a, object b)
行 154: {
行 155: FileInfo fa = (FileInfo)a;
行 156: FileInfo fb = (FileInfo)b;
行 157: switch (mso)
Top
7 楼wtoeb(FAQC.COM)回复于 2005-06-16 00:26:14 得分 0
我的代码如下,思归大哥,帮帮看看有什么问题?谢谢。
string[] files=Directory.GetFiles(@Server.MapPath("./upload/"));
Array.Sort(files, new SortFile(SortOption.FileName));
for(int i=0;i<files.Length;i++)
{
……
}
public class SortFile : IComparer
{
SortOption mso;
public SortFile(SortOption so)
{
mso = so;
}
int IComparer.Compare(object a, object b)
{
FileInfo fa = (FileInfo)a;
FileInfo fb = (FileInfo)b;
switch (mso)
{
case SortOption.FileName:
return String.Compare(fa.Name, fb.Name, true);
//break;
case SortOption.Extension:
return String.Compare(Path.GetExtension(fa.Name), Path.GetExtension(fb.Name), true);
//break;
case SortOption.CreationTime:
return DateTime.Compare(fa.CreationTime, fb.CreationTime);
//break;
default:
break;
}
return 0;
}
}
public enum SortOption
{
FileName,
Extension,
CreationTime
}
红色的错误提示落在:FileInfo fa = (FileInfo)a;这一行。
谢谢。Top
8 楼upto(阿球|Mobile Smart Client)回复于 2005-06-16 00:32:08 得分 5
楼主,你要用 DirectoryInfo 类来获取文件的 FileInfo 数组,不要直接用 Directory 的静态方法获取文件名数组。Top
9 楼upto(阿球|Mobile Smart Client)回复于 2005-06-16 00:32:37 得分 0
上面的转换无效,应该就是 string -> FileInfo 转换无效。Top
10 楼wtoeb(FAQC.COM)回复于 2005-06-16 00:44:50 得分 0
upto(阿球|Smart Client with EntLib)
谢谢您,成了。现在想要做一个分页,又是很麻烦的哦。
谢谢。Top




