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

  • 相关阅读:
    IIS笔记-Application Request Route(ARR)
    UE4笔记-UStructToJsonObjectString首字母自动转换为小写的问题及解决方法
    Electron/Nodejs开发笔记-功能问题记录及指南
    Net笔记-EF/EF Core/Dapper等ORM开发记录
    C/C++和C#混合编程笔记-DLL调用与IPC等mixed问题记录
    CImg笔记
    Net/Net Core笔记 WebAPI/MVC一些bug和处理
    Net-Net Core 3.0 gRPC 开发不完全笔记
    UE4-PixelStreaming不完全开发笔记
    UE4-开发中遇到的问题和处理方法
  • 原文地址:https://www.cnblogs.com/WangJinYang/p/2679784.html
Copyright © 2011-2022 走看看