返回首页
当前位置: 主页 > 网络编程 > .Net实例教程 >

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

时间:2017-11-06 22:44来源:知行网www.zhixing123.cn 编辑:麦田守望者

一般来说,文件默认按文件名排序,当用 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] 取到最后一个文件,需要对所取得的文件按时间重新排序。

顶一下
(0)
0%
踩一下
(0)
0%
标签(Tag):C#
------分隔线----------------------------
------分隔线----------------------------
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
评价:
表情:
验证码:点击我更换图片
猜你感兴趣