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

  • 相关阅读:
    linq to sql的性能和reader相比只是差一点点吗
    Win11删除右键菜单open in windows Terminal
    jdk1.8
    mvcc read view
    javascript 跨域双向通信方案,通过postMessage和window.name实现
    [原创]如何加载动态库、获取方法委托、卸载动态库
    awseks创建与使用
    aiops 调研
    consul调研
    机器学习调研
  • 原文地址:https://www.cnblogs.com/WangJinYang/p/2679784.html
Copyright © 2011-2022 走看看