C#操作文件

本文探讨了在C#程序中使用DirectoryInfo的GetFiles()方法获取文件列表时的排序问题,发现所得顺序与资源管理器中手动排序不一致,并提供了一种自定义排序的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我有个文件夹,在“我的电脑”或资源管理器里查看这个文件夹,点击“名称”排序,得到的顺序是,如果是数字的,会自动按数字递增或递减排序,有字母的,会 按字母顺序排,如图:http://www.lugs.cn/UploadFile/Images/20070726202841.JPG,但是,我在 C#程序里用DirectoryInfo的GetFiles()方法读取文件列表的时候,直接在foreach里遍历顺序列出来,得到的结果却是这样的: http://www.lugs.cn/UploadFile/Images/20070726202852.JPG,
程序代码如下:
string dir = @"D:/ProjectSRC/Images/20070726193917";
DirectoryInfo di = new DirectoryInfo(dir);

FileInfo[] fis = di.GetFiles();
Array.Sort(fis, new SortFile(SortOption.FileName));
foreach(FileInfo fi in fis)
{
Response.Write(fi.Name+"<br/>");
}

这 句“Array.Sort(fis, new SortFile(SortOption.FileName));”有与没有,结果都是这样(如何才能让这个顺序做到与在本机资源管理器里按名称排序得到 的结果完全一致呢?),这句里用到的SortFile方法,是我在网上搜索到的一个排序类:

using System;
using System.Collections;
using System.IO;

public enum SortOption
{
FileName,
Extension,
CreationTime
}

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

请路过的高手给予指点
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值