`
jiasongmao
  • 浏览: 670693 次
  • 性别: Icon_minigender_1
  • 来自: 石家庄
社区版块
存档分类
最新评论

用LINQ遍历目录

    博客分类:
  • .NET
阅读更多

今天看了一天的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 subDir.ToXml(),

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 subDir.ToXml(searchPattern),

from file in dir.GetFiles(searchPattern)

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

return root;

}

使用的时候是这样

DirectoryInfo dir = new DirectoryInfo(path);

XElement dirXml = dir.ToXml("*.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.ToXml(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 subDir.ToXml(searchPatterns),

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 ?)就像一个刀疤,有谁有什么好些的主意吗?

转载地址:http://www.cnblogs.com/alexch/archive/2008/10/20/1315438.html

分享到:
评论

相关推荐

    用linq遍历目录 简便

    在给定的标题“用linq遍历目录 简便”中,我们将探讨如何利用C#中的LINQ与System.IO命名空间结合,以简便的方式遍历指定的目录结构,并根据描述,将结果输出为XML格式。 首先,我们需要引入必要的命名空间: ```...

    LINQ实例教程-用Linq对TreeView进行操作

    【标题】:“LINQ实例教程-用Linq对TreeView进行操作” 在.NET框架中,Language Integrated Query(LINQ)是一种强大的查询技术,它允许开发者使用熟悉的C#或VB.NET语言来执行数据查询。本教程专注于如何利用LINQ来...

    LINQ对文件目录的基本操作

    本篇将详细探讨如何使用LINQ对文件目录进行基本操作。 1. **查询指定名称的文件**: 使用LINQ,可以方便地查询指定名称的文件。首先,你需要引入`System.Linq`和`System.IO`命名空间。然后,可以通过`Directory....

    LINQ中文系列教程

    What‘s LINQ? Language Integrated Query 是也。说得再明白一些,这是编程语言的一种新特性,能够将数据查询语句集成到编程语言中。目前,LINQ支持的语言有C# 和 VB。...使用linq to xml 快速创建自己的Rss 93

    LINQ基础教程(中文版) 适合初学者

    What‘s LINQ? Language Integrated Query 是也。说得再明白一些,这是编程语言的一种新特性,能够将数据查询语句集成到编程语言中。目前,LINQ支持的语言有C# 和 VB。...使用linq to xml 快速创建自己的Rss 93

    查找,分组文件 linq to objects

    在这个程序中,我们将探讨如何使用LINQ来查找和分组文件,从而实现高效的数据操作。 首先,让我们了解查找操作。在LINQ中,我们可以使用`Where`方法来筛选满足特定条件的对象。例如,如果我们想找到所有扩展名为....

    LINQ简要技术.rar

    目录 第Ⅰ部分 LINQ到对象 1 第1章 LINQ到对象简介 1 第2章 延迟操作符 2 2.1. 限定操作符 2 2.2. 投影(Projection)操作符 3 2.3. 分区操作符 3 2.4. 串联操作符 3 2.5. 排序操作符 4 2.6. 连接操作符 4 ...

    net查询目录及其所有子目录源码__0525).rar

    在C#中,遍历目录和子目录主要通过使用`System.IO`命名空间中的类来实现。以下是一些关键知识点: 1. **Directory类**: `Directory`类提供了用于处理目录的各种静态方法,如`GetDirectories()`用于获取指定目录下的...

    c#获取文件目录源码.rar

    总结,C# 中获取文件目录涉及的主要知识点包括:`System.IO` 命名空间中的类,如 `Directory` 和 `DirectoryInfo`,递归遍历目录,使用 LINQ,文件路径操作,异步方法,以及异常处理。通过这些技术,开发者可以高效...

    .net查询目录及其所有子目录源码

    // 遍历目录中的所有文件 foreach (FileInfo file in dir.GetFiles()) { Console.WriteLine($"文件:{file.FullName}"); } // 遍历子目录 foreach (DirectoryInfo subDir in dir.GetDirectories()) { ...

    net查询目录及其所有子目录源码-RSP.rar

    5. **异常处理**:遍历目录时可能会遇到访问权限问题或其他异常,因此需要使用try-catch块来处理可能出现的异常,保证程序的健壮性。 6. **多线程或异步操作**:如果目录结构非常庞大,遍历过程可能耗时较长。此时...

    遍历XML并加载到树

    本文将深入探讨如何使用C# WinForm技术来遍历XML文件,并将其内容加载到树形控件中。 首先,我们需要了解XML的基本结构。XML文档由元素、属性、文本节点等组成,其中元素是XML文档的核心,可以通过层级关系形成一棵...

    C#使用LINQ技术获取文件详细信息

    本篇将详细讲解如何使用LINQ来获取文件的详细信息,如扩展名、修改时间和创建时间等属性。 首先,我们需要引入`System.Linq`和`System.IO`命名空间,因为LINQ操作和文件操作相关的类都位于这两个命名空间中。在你的...

    C# 遍历文件夹子目录下所有图片及遍历文件夹下的文件

    使用`System.IO`命名空间中的`Directory`类,可以轻松遍历文件夹及其子目录。`Directory.GetFiles()`方法是关键,它接受三个参数:要搜索的目录路径、通配符(默认情况下只匹配顶级目录中的文件)和`SearchOption`...

    VB源码 文件遍历的例子

    在.NET环境中,可以利用LINQ进一步扩展文件遍历的功能,例如按照文件类型筛选文件。 总之,VB源码的文件遍历主要涉及`FileSystemObject`或`.NET Framework`的`Directory`类,它们提供了一套完整的工具来操作文件...

    C#获取本地磁盘目录完整源码【201903】

    4. **递归遍历目录**:如果你需要获取整个磁盘的目录结构,可以使用递归方法。首先,使用`Directory.GetDirectories()`获取根目录下的所有子目录,然后对每个子目录调用相同的方法,直到遍历完所有层级。 5. **LINQ...

    .net mvc+ztree+webapi本地文件遍历查询系统

    WebAPI可以使用C#的LINQ库高效地遍历文件系统,并返回JSON格式的结果,这些结果随后被ZTree解析并显示给用户。 数据库连接问题.txt可能包含了项目中遇到的数据库连接相关的调试信息或解决策略。在实际应用中,.NET ...

    net查询目录及其所有子目录源码__(0521).rar

    3. **递归**:遍历目录及其所有子目录通常需要使用递归算法。在C#中,我们定义一个函数,接收一个DirectoryInfo对象作为参数,然后在函数内部调用自身处理每个子目录。 4. **LINQ (Language Integrated Query)**:...

    net查询目录及其所有子目录源码_《0528》.rar

    以下是一个简化的示例代码片段,展示了如何使用C#遍历目录及其子目录: ```csharp using System; using System.IO; public static void TraverseDirectory(DirectoryInfo directory) { Console.WriteLine...

Global site tag (gtag.js) - Google Analytics