使用Directory.GetFiles,如何按文件名分别进行升序或降序排序?
string[] files=Directory.GetFiles(@Server.MapPath("./upload/"));
我得到的结果并不是按汉语拼音排列的,也无法按升序或降序排列。
请帮帮我,谢谢。

解决方案 »

  1.   

    例子可见:www.loveshe.com。
    左边最新的列表是按文件建立的时间来排序的。
    中间这个没有进行排序处理。
    谢谢。
      

  2.   

    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);  }
    }
      

  3.   

    saucer(思归):
    大哥,我是想分别用:
    1、按文件名来进行升序或降序排列(未解决);
    2、按扩展名来进行升序或降序排列(未解决);
    3、按创建时间来进行升序或降序排列(已解决)。
    谢谢。
      

  4.   

    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);  }
    }
      

  5.   

    不好意思,搞了半天,不知道怎么转成WEB的。
      

  6.   

    提示信息如下:指定的转换无效。 
    说明: 执行当前 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)
     
      

  7.   

    我的代码如下,思归大哥,帮帮看看有什么问题?谢谢。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;这一行。
    谢谢。
      

  8.   

    楼主,你要用 DirectoryInfo 类来获取文件的 FileInfo 数组,不要直接用 Directory 的静态方法获取文件名数组。
      

  9.   

    上面的转换无效,应该就是 string -> FileInfo 转换无效。
      

  10.   

    upto(阿球|Smart Client with EntLib)
    谢谢您,成了。现在想要做一个分页,又是很麻烦的哦。
    谢谢。