程序开发 > C# > 正文

按文件名排序隐藏陷井、注意问题(序号文件名)

亮术网 2020-08-26 本网原创

一般来说,文件默认按文件名排序,当用 C# 或 java 获取到某一目录下的所有文件时,这些文件就是按文件名排序的。大多情况下不会发生错误,如果文件名中包含序号,如 文件1、文件2、文件3,……,文件9、文件10、文件11,……,用循环取文件时就会发生错误,取到的可能不是预想的文件。

先看包含序号的文件名是如何按文件名排序的。仍用上面的例子,则按文件名排序为:文件1、文件10、文件11、文件2、文件3,……,文件9,……。“文件10、文件11”排到了“文件1”之后“文件2”之前,原本以为取最后一个文件名是“文件11”,结果错了。

 

C#文件名排序隐藏陷井示例:

假如获取某一文件夹中的所有文本文件,有些文件的文件名中包含序号,也就是上面的“文件1、文件2,……”。下面的代码先获取文件再输出按文件名排序的结果:

/// <summary>
  /// C#文件名排序隐藏陷井示例
  /// </summary>
  /// <param name="filePath">路径</param>
  /// <returns>文件名列表</returns>

  private IList<string> GetFileNames(string filePath)
  {
    DirectoryInfo di = new DirectoryInfo(filePath);
    FileInfo[] fi = di.GetFiles("*.txt");
    IList<string> iFileName = new List<string>();
    for (int i = 0; i < fi.Length; i++)
    {
      iFileName.Add(fi[i].Name);
    }
    return iFileName;
   }

调用方法:

string filePath = @"G:\Design\txtfile";
  IList<string> ifn = GetFileNames(filePath);
  for (int i = 0; i < ifn.Count; i++)
  {
    Response.Write("<br />" + ifn[i]);
  }

输出结果:

文件1
  文件10
  文件11
  文件2
  文件3
  文件4
  文件5
  文件6
  文件7
  文件8
  文件9

假如取最后一个文件名,如 ifn[ifn.Count - 1],预想应该取到文件11,按照输出结果看,取到的却是文件9,这就是按文件名排序隐藏的陷井,很容易忽略。举的虽然是 C# 的例子,java文件名排序同样要注意该问题。

如果想用 ifn[ifn.Count - 1] 取到最后一个文件,需要对所取得的文件按时间重新排序。

本文浓缩标签:文件名排序