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 ?)

  • 相关阅读:
    django变量使用-在模板中使用视图函数中的变量
    django创建app、在视图函数及url中使用参数、url命名、通过redirect实现网页路径跳转
    第一个django项目-通过命令行和pycharm两种方式
    python安装虚拟环境virtualenvwrapper
    装饰器案例由来例子
    转发:python 装饰器--这篇文章讲的通俗易懂
    JVM调优之jstack找出最耗cpu的线程并定位代码
    mysql视图定义、原理、创建、使用
    列表生成 加1四种方法
    【good】在CentOS 6.x上安装GlusterFS
  • 原文地址:https://www.cnblogs.com/WangJinYang/p/2679784.html
Copyright © 2011-2022 走看看