今天看了一天的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遍历目录 简便”中,我们将探讨如何利用C#中的LINQ与System.IO命名空间结合,以简便的方式遍历指定的目录结构,并根据描述,将结果输出为XML格式。 首先,我们需要引入必要的命名空间: ```...
【标题】:“LINQ实例教程-用Linq对TreeView进行操作” 在.NET框架中,Language Integrated Query(LINQ)是一种强大的查询技术,它允许开发者使用熟悉的C#或VB.NET语言来执行数据查询。本教程专注于如何利用LINQ来...
本篇将详细探讨如何使用LINQ对文件目录进行基本操作。 1. **查询指定名称的文件**: 使用LINQ,可以方便地查询指定名称的文件。首先,你需要引入`System.Linq`和`System.IO`命名空间。然后,可以通过`Directory....
What‘s LINQ? Language Integrated Query 是也。说得再明白一些,这是编程语言的一种新特性,能够将数据查询语句集成到编程语言中。目前,LINQ支持的语言有C# 和 VB。...使用linq to xml 快速创建自己的Rss 93
What‘s LINQ? Language Integrated Query 是也。说得再明白一些,这是编程语言的一种新特性,能够将数据查询语句集成到编程语言中。目前,LINQ支持的语言有C# 和 VB。...使用linq to xml 快速创建自己的Rss 93
在这个程序中,我们将探讨如何使用LINQ来查找和分组文件,从而实现高效的数据操作。 首先,让我们了解查找操作。在LINQ中,我们可以使用`Where`方法来筛选满足特定条件的对象。例如,如果我们想找到所有扩展名为....
目录 第Ⅰ部分 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 ...
在C#中,遍历目录和子目录主要通过使用`System.IO`命名空间中的类来实现。以下是一些关键知识点: 1. **Directory类**: `Directory`类提供了用于处理目录的各种静态方法,如`GetDirectories()`用于获取指定目录下的...
总结,C# 中获取文件目录涉及的主要知识点包括:`System.IO` 命名空间中的类,如 `Directory` 和 `DirectoryInfo`,递归遍历目录,使用 LINQ,文件路径操作,异步方法,以及异常处理。通过这些技术,开发者可以高效...
// 遍历目录中的所有文件 foreach (FileInfo file in dir.GetFiles()) { Console.WriteLine($"文件:{file.FullName}"); } // 遍历子目录 foreach (DirectoryInfo subDir in dir.GetDirectories()) { ...
5. **异常处理**:遍历目录时可能会遇到访问权限问题或其他异常,因此需要使用try-catch块来处理可能出现的异常,保证程序的健壮性。 6. **多线程或异步操作**:如果目录结构非常庞大,遍历过程可能耗时较长。此时...
本文将深入探讨如何使用C# WinForm技术来遍历XML文件,并将其内容加载到树形控件中。 首先,我们需要了解XML的基本结构。XML文档由元素、属性、文本节点等组成,其中元素是XML文档的核心,可以通过层级关系形成一棵...
本篇将详细讲解如何使用LINQ来获取文件的详细信息,如扩展名、修改时间和创建时间等属性。 首先,我们需要引入`System.Linq`和`System.IO`命名空间,因为LINQ操作和文件操作相关的类都位于这两个命名空间中。在你的...
使用`System.IO`命名空间中的`Directory`类,可以轻松遍历文件夹及其子目录。`Directory.GetFiles()`方法是关键,它接受三个参数:要搜索的目录路径、通配符(默认情况下只匹配顶级目录中的文件)和`SearchOption`...
在.NET环境中,可以利用LINQ进一步扩展文件遍历的功能,例如按照文件类型筛选文件。 总之,VB源码的文件遍历主要涉及`FileSystemObject`或`.NET Framework`的`Directory`类,它们提供了一套完整的工具来操作文件...
4. **递归遍历目录**:如果你需要获取整个磁盘的目录结构,可以使用递归方法。首先,使用`Directory.GetDirectories()`获取根目录下的所有子目录,然后对每个子目录调用相同的方法,直到遍历完所有层级。 5. **LINQ...
WebAPI可以使用C#的LINQ库高效地遍历文件系统,并返回JSON格式的结果,这些结果随后被ZTree解析并显示给用户。 数据库连接问题.txt可能包含了项目中遇到的数据库连接相关的调试信息或解决策略。在实际应用中,.NET ...
3. **递归**:遍历目录及其所有子目录通常需要使用递归算法。在C#中,我们定义一个函数,接收一个DirectoryInfo对象作为参数,然后在函数内部调用自身处理每个子目录。 4. **LINQ (Language Integrated Query)**:...
以下是一个简化的示例代码片段,展示了如何使用C#遍历目录及其子目录: ```csharp using System; using System.IO; public static void TraverseDirectory(DirectoryInfo directory) { Console.WriteLine...