c#如何提取具有特定扩展名的文件路径并检索其父文件夹名

c#如何提取具有特定扩展名的文件路径并检索其父文件夹名,c#,C#,我有一个文件夹结构如下,最上面的两个文件夹结构是可预测的,例如DrawingFiles和项目名称,它们将是任意随机数。我正在尝试从项目文件夹中提取扩展名为“.dwg”的文件 复杂性在于,在项目文件夹中,可能存在任意数量的随机文件夹,“.dwg”文件可能位于任意文件夹或多个文件夹中。我的目标是从每个项目文件夹和找到任何给定dwg文件的文件夹中提取“.dwg”文件的所有文件路径,该文件夹将成为规程文件夹。我想提取项目名称、规程名称和中的dwg文件列表 DrawingFiles &

我有一个文件夹结构如下,最上面的两个文件夹结构是可预测的,例如DrawingFiles和项目名称,它们将是任意随机数。我正在尝试从项目文件夹中提取扩展名为“.dwg”的文件

复杂性在于,在项目文件夹中,可能存在任意数量的随机文件夹,“.dwg”文件可能位于任意文件夹或多个文件夹中。我的目标是从每个项目文件夹和找到任何给定dwg文件的文件夹中提取“.dwg”文件的所有文件路径,该文件夹将成为规程文件夹。我想提取项目名称、规程名称和中的dwg文件列表

DrawingFiles
          >12345
            >xyz12
               >Engr
                 a.dwg
                 b.dwg
               >Elec
                 c.dwg
                 f.dwg
          >45678
            >xyz12
                 at.dwg
                 bt.dwg
             >Elec
                 b.dwg
                 l.dwg
             >spec1
                 >Struct
                   123.dwg

您可以通过传递已知文件夹路径来调用此方法:

private List<String> DirSearch(string rootDir)
{
    List<String> files = new List<String>();
    try
    {
        foreach (string f in Directory.GetFiles(rootDir))
        {
            FileInfo fi = new FileInfo(f);
            if(fi.Extension==".dwg"){
                string parent = System.IO.Directory.GetParent(rootDir).FullName;
                files.Add(parent);

            }
        }
        foreach (string d in Directory.GetDirectories(rootDir))
        {
            files.AddRange(DirSearch(d));
        }
    }
    catch
    {

    }

    return files;
}
私有列表目录搜索(字符串rootDir)
{
列表文件=新列表();
尝试
{
foreach(Directory.GetFiles(rootDir)中的字符串f)
{
FileInfo fi=新的FileInfo(f);
如果(fi.Extension==“.dwg”){
字符串parent=System.IO.Directory.GetParent(rootDir.FullName);
文件。添加(父级);
}
}
foreach(Directory.GetDirectories(rootDir)中的字符串d)
{
AddRange(DirSearch(d));
}
}
抓住
{
}
归还文件;
}

您可以通过传递已知文件夹路径来调用此方法:

private List<String> DirSearch(string rootDir)
{
    List<String> files = new List<String>();
    try
    {
        foreach (string f in Directory.GetFiles(rootDir))
        {
            FileInfo fi = new FileInfo(f);
            if(fi.Extension==".dwg"){
                string parent = System.IO.Directory.GetParent(rootDir).FullName;
                files.Add(parent);

            }
        }
        foreach (string d in Directory.GetDirectories(rootDir))
        {
            files.AddRange(DirSearch(d));
        }
    }
    catch
    {

    }

    return files;
}
私有列表目录搜索(字符串rootDir)
{
列表文件=新列表();
尝试
{
foreach(Directory.GetFiles(rootDir)中的字符串f)
{
FileInfo fi=新的FileInfo(f);
如果(fi.Extension==“.dwg”){
字符串parent=System.IO.Directory.GetParent(rootDir.FullName);
文件。添加(父级);
}
}
foreach(Directory.GetDirectories(rootDir)中的字符串d)
{
AddRange(DirSearch(d));
}
}
抓住
{
}
归还文件;
}
目录
将包含唯一的目录路径(每个文件夹仅重复一次)


目录
将包含唯一的目录路径(每个文件夹仅重复一次)。

Directory.GetFiles应该足够了。你试过了吗?Directory.GetFiles应该足够了。你试过了吗?Directory.GetFiles可以自己完成所有这一切。有一个重载,它使用文件模式和一个选项在子文件夹中执行递归搜索。不需要此代码。目录.GetFiles(rootDir,“*.dwg”,SearchOption.AllDirectories);我正在尝试检索一个包含规程名称和文件路径的列表,以防某些文件在某个目录中没有扩展名,并且由于这是一个递归,一个文件的问题不应停止整个处理。directory.GetFiles自行完成所有这一切。有一个重载,它使用文件模式和一个选项在子文件夹中执行递归搜索。不需要此代码。目录.GetFiles(rootDir,“*.dwg”,SearchOption.AllDirectories);我试图检索一个包含规程名称和文件路径的列表,以防某些文件存在于某个目录中而没有扩展名,并且由于这是一个递归,一个文件的问题不应停止整个处理。