zoukankan      html  css  js  c++  java
  • 用LINQ遍历目录【转】

    用LINQ遍历一个指定目录并输出为XML

    写出的代码如下:

    public static XElement ToXml(this DirectoryInfo dir)

    {

    XElement root = new XElement("Dir",

    new XAttribute("Name", dir.Name),

    from subDir in dir.GetDirectories()

    select DirToXml(subDir),

    from file in dir.GetFiles()

    select new XElement("File", file.Name));

    return root;

    }

    使用的时候,你可以这样:

    DirectoryInfo dir = new DirectoryInfo(path);

    XElement dirXml = dir.ToXml();

    OK,搞定。

    可以看出,LINQ非常强大,既然这么强大,为什么不更进一步呢?

    我要遍历一下目录里的制定格式的文件应该怎么做呢?

    比如说我要找出目录里的所有的mp3

    于是可以写出这样的代码

    public static XElement ToXml(this DirectoryInfo dir, string searchPattern)

    {

    XElement root = new XElement("Dir",

    new XAttribute("Name", dir.Name),

    from subDir in dir.GetDirectories()

    select DirToXml(subDir),

    from file in dir.GetFiles(searchPattern)

    select new XElement("File", file.Name));

    return root;

    }

    使用的时候是这样

    DirectoryInfo dir = new DirectoryInfo(path);

    XElement dirXml = dir.DirToXml("*.mp3");

    轻松搞定

    更进一步,如果我要找多个格式的文件呢?比如说要找出目录里面的图片文件(jpg, bmp, gif…)

    Ok,没问题,可以写成这样:

    public static XElement ToXml(this DirectoryInfo dir, string[] searchPatterns)

    {

    XElement root = new XElement("Dir",

    new XAttribute("Name", dir.Name),

    from subDir in dir.GetDirectories()

    select DirToXml(subDir),

    from pattern in searchPatterns

    from file in dir.GetFiles(pattern)

    select new XElement("File", file.Name));

    return root;

    }

    使用的时候可以这样:

    DirectoryInfo dir = new DirectoryInfo(path);

    XElement dirXml = dir.DirToXml(new[] { "*.mp3", "*.txt" });

    Ok,又搞定了。

    为什么我要写三个函数呢?我把三个合并成一个可以吗?试试看吧

    于是,代码就成了这样:

    public static XElement ToXml(this DirectoryInfo dir, params string[] searchPatterns)

    {

    XElement root = new XElement("Dir",

    new XAttribute("Name", dir.Name),

    from subDir in dir.GetDirectories()

    select DirToXml(subDir),

    searchPatterns.Length > 0 ?

    (from pattern in searchPatterns.Distinct() 

    from file in dir.GetFiles(pattern)

    select new XElement("File", file.Name))

    :

        (from file in dir.GetFiles()

    select new XElement("File", file.Name)));

    return root;

    }

    测试一下,perfect!

    美中不足的是,在代码中的一个(searchPatterns.Length > 0 ?)

  • 相关阅读:
    linux字符设备文件的打开操作
    Linux用ps命令查找进程PID再用kill命令终止进程的方法
    Linux内核锁与中断处理
    写给大数据开发初学者的话
    zabbix监控系统客户端安装
    详解zabbix安装部署(Server端篇)
    Keepalived+Nginx架构整理版
    Nginx + Tomcat 动静分离实现负载均衡
    五个常用的Linux监控脚本代码
    16个Linux服务器监控命令
  • 原文地址:https://www.cnblogs.com/WangJinYang/p/2679784.html
Copyright © 2011-2022 走看看