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

  • 相关阅读:
    高性能网络编程(七):到底什么是高并发?一文即懂!
    社交软件红包技术解密(十一):最全解密微信红包随机算法(含代码实现)
    sonar集成阿里p3c代码规范
    jenkins+sonar 持续集成检测代码质量
    JavaScript 利用零宽断言批量替换为注释符 // 后面加空格
    Git 合并时 submodule 冲突问题解决方法
    小程序 iphone X 1rpx 边框透明及不显示问题
    加快pip下载速度
    python中remove函数的坑
    Java程序运行内存机制
  • 原文地址:https://www.cnblogs.com/WangJinYang/p/2679784.html
Copyright © 2011-2022 走看看