两个有用的文件遍历器类
来源:互联网 发布:c ajaxfileupload.js 编辑:程序博客网 时间:2024/05/17 22:19
1.两个遍历实现类,FoldersFinder依赖FilesFilder.
/// <summary>
/// 文件遍历器,不遍历子目录,这个用于遍历单目录
/// </summary>
class FilesFilder
{
/// <summary>
/// 子成员,用于存储目录下的文件信息
/// </summary>
private Hashtable childElms;
/// <summary>
/// 遍历的根目录
/// </summary>
private String root;
public String getPosition()
{
return root;
}
public String getFolderName()
{
String[] dirs = root.Split('//');
return dirs[dirs.Length - 1];
}
/// <summary>
/// 扩展名过滤器,存储需要的文件扩展名,若指定为空则不进行文件扩展名过滤
/// </summary>
private ArrayList filters;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="folder"></param>
/// <param name="filters"></param>
public FilesFilder(String folder, ArrayList filters)
{
childElms = new Hashtable();
this.filters = filters;
root = folder;
DirectoryInfo dir = new DirectoryInfo(folder);
tranversal(dir);
}
/// <summary>
/// 遍历根目录下的文件
/// </summary>
/// <param name="dir"></param>
private void tranversal(DirectoryInfo dir)
{
FileSystemInfo[] fsis = dir.GetFileSystemInfos();
FileSystemInfo fsi;
for (int i = 0; i < fsis.Length; i++)
{
fsi = fsis[i];
if (fsi.GetType() == typeof(FileInfo) && isPassedFilters(fsi.Extension.ToString().ToUpper()))
{
//childElms.Add(DirFileUtil.getFileNameWithoutPath(fsi.FullName));
childElms.Add(DirFileUtil.getFileNameWithoutPath(fsi.FullName),GetFilePrimaryInfo((FileInfo)fsi));
}
}
}
/// <summary>
/// 判断是否通过了扩展名过滤器
/// </summary>
/// <param name="ext"></param>
/// <returns></returns>
private bool isPassedFilters(String ext)
{
if (filters == null) return true;
if (filters.Count == 0) return true;
ext = ext.Replace(".", "");
return filters.Contains(ext);
}
/// <summary>
/// 返回文件列表
/// </summary>
/// <returns></returns>
public Hashtable getFiles()
{
return childElms;
}
/// <summary>
/// 返回通过过滤的文件数量
/// </summary>
/// <returns></returns>
public int getFileCount()
{
return childElms.Count;
}
private FilePrimaryInfo GetFilePrimaryInfo(FileInfo fsi)
{
FilePrimaryInfo info = new FilePrimaryInfo();
info.Name = DirFileUtil.getFileNameWithoutPath(fsi.FullName);
info.Path = fsi.FullName.Replace(info.Name,"");
info.ModifyTime = fsi.LastWriteTime.ToString();
info.Size = fsi.Length.ToString();
return info;
}
}
/// <summary>
/// 文件夹遍历器,遍历子目录
/// </summary>
class FoldersFinder
{
/// <summary>
/// 子成员
/// </summary>
private ArrayList childElms;
/// <summary>
/// 遍历的根目录
/// </summary>
private String root;
/// <summary>
/// 扩展名过滤器,存储需要的文件扩展名,若指定为空则不进行文件扩展名过滤
/// </summary>
private ArrayList filters;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="folder"></param>
/// <param name="filters"></param>
public FoldersFinder(String folder, ArrayList filters)
{
childElms = new ArrayList();
root = folder;
this.filters = filters;
DirectoryInfo dir = new DirectoryInfo(folder);
// 加入本身
FilesFilder filesFilder = new FilesFilder(folder, filters);
if (filesFilder.getFileCount() > 0)
{
childElms.Add(filesFilder);
}
tranversal(dir);
}
/// <summary>
/// 遍历根目录下的子目录,将过滤过的文件夹加入
/// </summary>
/// <param name="dir"></param>
private void tranversal(DirectoryInfo dir)
{
FileSystemInfo[] fsis = dir.GetFileSystemInfos();
FileSystemInfo fsi;
for (int i = 0; i < fsis.Length; i++)
{
fsi = fsis[i];
if (fsi.GetType() == typeof(DirectoryInfo))
{
FilesFilder filesFilder = new FilesFilder(fsi.FullName, filters);
if (filesFilder.getFileCount()>0)
{
childElms.Add(filesFilder);
}
tranversal((DirectoryInfo)fsi);
}
}
}
/// <summary>
/// 返回目录列表
/// </summary>
/// <returns></returns>
public ArrayList getFolders()
{
return childElms;
}
}
2.一个辅助类,用于存储文件信息
class FilePrimaryInfo : IComparable
{
private String name;
private String path;
private String size;
private String modifyTime;
private static String sortBy = "name";
public static String SortBy
{
get { return sortBy; }
set { sortBy = value; }
}
public int CompareTo(object obj)
{
if (!(obj is FilePrimaryInfo))
throw new InvalidCastException("Not a valid Developer object.");
FilePrimaryInfo filePrimaryInfo = (FilePrimaryInfo)obj;
if (sortBy.Equals("NAME"))
{
return this.name.CompareTo(filePrimaryInfo.name);
}
else if (sortBy.Equals("SIZE"))
{
return this.size.CompareTo(filePrimaryInfo.size);
}
else if (sortBy.Equals("TIME"))
{
return this.modifyTime.CompareTo(filePrimaryInfo.modifyTime);
}
else
{
return this.name.CompareTo(filePrimaryInfo.name);
}
}
public String Name
{
get { return name; }
set { name = value; }
}
public String Path
{
get { return path; }
set { path = value; }
}
public String Size
{
get { return size; }
set { size = value; }
}
public String ModifyTime
{
get { return modifyTime; }
set { modifyTime = value; }
}
}
3.使用方法:
// 创建扩展名过滤器,过滤器的扩展名大小写要注意,你也可以修改
ArrayList filters=new ArrayList();
filters.Add("bmp");
filters.Add("jpg");
// 遍历单目录
FilesFilder finder = new FilesFilder(@"c:/abc", filters);
// 遍历目录及其子目录
FoldersFinder finder = new FoldersFinder(@"c:/abc", filters);
- 两个有用的文件遍历器类
- 两个有用的脚本
- linux下两个有用的用户登录日志文件
- Netbeans6 两个有用的快捷键
- 比较有用的两个批处理文件
- 两个有用的Eclipse功能
- Delphi两个有用的函数
- 两个有用的minicom命令
- 拦截器 之 6.4 两个有用的拦截器
- 有用的资源文件
- 今天解决了两个关于.NET读取EXCEL文件的问题,记下来,很有用!
- 文件遍历器类
- 两个有用的ASP.Net小程序
- 两个非常有用的进程函数
- 两个比较有用的Javascript工具函数
- 两个有用的设计工具转载
- flex中非常有用的两个包
- Eclipse中两个有用的快捷键
- ARX面试
- 实时控制软件的质量控制
- 李嘉诚的14句经典成功格言
- .net中快捷键定义
- USB枚举过程详述
- 两个有用的文件遍历器类
- 整合Oracle 10g、Apache 2.0、PHP 5
- 上班族不知不觉发财10大秘诀
- 复杂软件缺陷分析与质量控制
- 我看莉香
- JDBC与连接池
- Vista系统中隐藏的四大硬盘杀手
- 详解Visual C++ 2005中的突破性变化
- 轻松掌握Windows窗体间的数据交互