C# 如何在C中遍历物理文件夹并读取叶文件#

C# 如何在C中遍历物理文件夹并读取叶文件#,c#,.net,windows,file,c#-4.0,C#,.net,Windows,File,C# 4.0,我有一个根节点a,其中包含B,其中包含C,其中包含D,其中包含一个XML文件abc.XML 所以在D:\drive中,我有以下目录结构A>>B>>C>>D。 这条道路是动态的。通过迭代物理文件夹来读取C#中的abc.xml文件的最佳做法是什么?您可以实现一种递归搜索算法,该算法遍历所有文件夹并向下进入子文件夹 伪代码: public void GetXMLFilesRecursive(string currentFolder, List<string> results) {

我有一个根节点a,其中包含B,其中包含C,其中包含D,其中包含一个XML文件abc.XML 所以在D:\drive中,我有以下目录结构A>>B>>C>>D。
这条道路是动态的。通过迭代物理文件夹来读取C#中的abc.xml文件的最佳做法是什么?

您可以实现一种递归搜索算法,该算法遍历所有文件夹并向下进入子文件夹

伪代码:

public void GetXMLFilesRecursive(string currentFolder, List<string> results)
{
    // Enumerate all directories of currentFolder
    string[] folders = Directory.GetDirectories(currentFolder);
    foreach (string folder in folders)
        GetXMLFilesRecursive(folder, results));

    // Enumerate all XML files in this folder only if it has no other sub-folders (is a leaf)
    if (folders.Length == 0)
    {
        string[] xmlFiles = Directory.GetFiles(currentFolder, "*.xml");
        results.AddRange(xmlFiles);
    }
}
public void GetXMLFilesRecursive(字符串currentFolder,列出结果)
{
//枚举currentFolder的所有目录
string[]folders=Directory.GetDirectories(currentFolder);
foreach(文件夹中的字符串文件夹)
GetXMLFilesRecursive(文件夹、结果));
//仅当此文件夹没有其他子文件夹(是叶)时,才枚举此文件夹中的所有XML文件
如果(folders.Length==0)
{
字符串[]xmlFiles=Directory.GetFiles(currentFolder,*.xml”);
results.AddRange(xmlFiles);
}
}
此方法仅返回层次结构中最低文件夹(即没有子文件夹的文件夹)中的XML文件。如果您想要一路上找到的所有文件,请注释掉
If(folders.Length==0)
。另一方面,您还可以使用
Directory.GetFiles
SearchOption.AllDirectories



为什么我写了一个递归算法:OP询问如何在叶目录中找到所有XML文件。使用
Directory.GetFiles
SearchOption.AllDirectories
,您无法做到这一点,但您需要实现上述功能。

您可以实现一种递归搜索算法,该算法遍历所有文件夹并向下进入子文件夹

伪代码:

public void GetXMLFilesRecursive(string currentFolder, List<string> results)
{
    // Enumerate all directories of currentFolder
    string[] folders = Directory.GetDirectories(currentFolder);
    foreach (string folder in folders)
        GetXMLFilesRecursive(folder, results));

    // Enumerate all XML files in this folder only if it has no other sub-folders (is a leaf)
    if (folders.Length == 0)
    {
        string[] xmlFiles = Directory.GetFiles(currentFolder, "*.xml");
        results.AddRange(xmlFiles);
    }
}
public void GetXMLFilesRecursive(字符串currentFolder,列出结果)
{
//枚举currentFolder的所有目录
string[]folders=Directory.GetDirectories(currentFolder);
foreach(文件夹中的字符串文件夹)
GetXMLFilesRecursive(文件夹、结果));
//仅当此文件夹没有其他子文件夹(是叶)时,才枚举此文件夹中的所有XML文件
如果(folders.Length==0)
{
字符串[]xmlFiles=Directory.GetFiles(currentFolder,*.xml”);
results.AddRange(xmlFiles);
}
}
此方法仅返回层次结构中最低文件夹(即没有子文件夹的文件夹)中的XML文件。如果您想要一路上找到的所有文件,请注释掉
If(folders.Length==0)
。另一方面,您还可以使用
Directory.GetFiles
SearchOption.AllDirectories



为什么我写了一个递归算法:OP询问如何在叶目录中找到所有XML文件。您不能使用
Directory.GetFiles
SearchOption.AllDirectories
,但是您需要实现上述功能。

您可以使用
Directory.GetFiles(d,“*.xml”,SearchOption.AllDirectories)
来获取所有xml文件,以获取所需内容。

您可以使用
Directory.GetFiles(d,“*.xml”,SearchOption.AllDirectories)
获取所有xml文件以获取所需内容。

您可以使用或使用,例如,在整个树中搜索文件

您还可以使用DirectoryInfo类获取完整的FileInfo实例,而不仅仅是路径,并可以访问文件属性和属性:

var myDir=new DirectoryInfo(myPath);
var fileInfos=myDir.GetFiles("abc.xml",SearchOption.AllDirectories);
GetFiles和EnumerateFiles方法之间的区别在于,第一个方法返回一个包含找到的所有文件的数组,直到找到所有文件为止。另一方面,在找到结果时返回结果,因此您可以更快地处理结果

GetFiles的功能也适用于/函数集。这些方法在Directory和DirectoryInfo类中都可用


如果要同时搜索目录和文件,可以使用/通过一次调用返回这两个目录和文件。等效的DirectoryInfo方法是/

,您可以使用或使用,例如,在整个树中搜索文件

您还可以使用DirectoryInfo类获取完整的FileInfo实例,而不仅仅是路径,并可以访问文件属性和属性:

var myDir=new DirectoryInfo(myPath);
var fileInfos=myDir.GetFiles("abc.xml",SearchOption.AllDirectories);
GetFiles和EnumerateFiles方法之间的区别在于,第一个方法返回一个包含找到的所有文件的数组,直到找到所有文件为止。另一方面,在找到结果时返回结果,因此您可以更快地处理结果

GetFiles的功能也适用于/函数集。这些方法在Directory和DirectoryInfo类中都可用

如果要同时搜索目录和文件,可以使用/通过一次调用返回这两个目录和文件。等效的DirectoryInfo方法是/

公共列表getFiles(字符串路径、字符串搜索模式、列表列表)
{
尝试
{
foreach(Directory.GetDirectories(path)中的字符串文件夹)
获取文件(文件夹、搜索模式、列表);
AddRange(Directory.GetFiles(path,searchPattern));
}
捕获(未经授权的访问例外)
{
//没有访问该文件的权限。
}
退货清单;
}
这样称呼:

//Get all xml files in the D drive:
List<string> files = getFiles(@"d:\", "*.xml", new List<string>());
//获取D驱动器中的所有xml文件:
List files=getFiles(@“d:\”,“*.xml”,new List());
公共列表getFiles(字符串路径、字符串搜索模式、列表列表)
{
尝试
{
foreach(Directory.GetDirectories(path)中的字符串文件夹)
获取文件(文件夹、搜索模式、列表);
AddRange(Directory.GetFiles(path,searchPattern));
}
捕获(未经授权的访问例外)
{
//没有访问该文件的权限。
}
退货清单;
}
这样称呼:

//Get all xml files in the D drive:
List<string> files = getFiles(@"d:\", "*.xml", new List<string>());
//获取D驱动器中的所有xml文件:
List files=getFiles(@“d:\”,“*.xml”,new List());

如果您不知道文件的位置,您别无选择,只能迭代所有目录,直到找到要查找的内容。W