C# 是否有类似于Powershell';在.NET中是dir吗?

C# 是否有类似于Powershell';在.NET中是dir吗?,c#,vb.net,C#,Vb.net,我正在寻找.NET中的内置功能来查询具有相对路径和通配符的文件夹,类似于Powershell的dir命令(也称为ls)。据我所知,Powershell返回一个DirectoryInfo和FileInfo.NET对象数组,以后可以用于处理。输入示例: ..\bin\Release\XmlConfig\*.xml 将转换为多个XML文件的FileInfo NET中有类似的功能吗?System.IO.Directory是提供该功能的静态类 例如,您的示例是: using System.IO; bo

我正在寻找.NET中的内置功能来查询具有相对路径和通配符的文件夹,类似于Powershell的
dir
命令(也称为
ls
)。据我所知,Powershell返回一个
DirectoryInfo
FileInfo
.NET对象数组,以后可以用于处理。输入示例:

..\bin\Release\XmlConfig\*.xml
将转换为多个XML文件的
FileInfo


NET中有类似的功能吗?

System.IO.Directory
是提供该功能的静态类

例如,您的示例是:

using System.IO;

bool searchSubfolders = false;
foreach (var filePath in Directory.EnumerateFiles(@"..\bin\Release\XmlConfig",
                                                  "*.xml", searchSubfolders))
{
    var fileInfo = new FileInfo(filePath); //If you prefer
    //Do something with filePath
}
一个更复杂的例子是:(注意,这并不是真正彻底的测试,例如,以
\
结尾的字符串会导致错误)


System.IO.Directory
是提供该功能的静态类

例如,您的示例是:

using System.IO;

bool searchSubfolders = false;
foreach (var filePath in Directory.EnumerateFiles(@"..\bin\Release\XmlConfig",
                                                  "*.xml", searchSubfolders))
{
    var fileInfo = new FileInfo(filePath); //If you prefer
    //Do something with filePath
}
一个更复杂的例子是:(注意,这并不是真正彻底的测试,例如,以
\
结尾的字符串会导致错误)

您可以使用API:

该方法将以
FileSystemInfo
s序列的形式对结果进行流式处理,这是
FileInfo
DirectoryInfo
的基类。您可以使用API:



该方法将结果作为
FileSystemInfo
s序列进行流式处理,这是
FileInfo
DirectoryInfo
的基类<代码>文件信息和
目录信息
?你需要什么样的模拟物?这些应该可以。@Oded:我正在寻找基于筛选器返回FileInfo数组/列表/可枚举的正确函数。那么为什么不查看
FileInfo
DirectoryInfo
MSDN页面呢?第一个呼叫端口,您就会找到您的答案。@Oded:它们都不能像Powershell那样工作。例如,EnumerateFileSystemInfo似乎不喜欢对文件名以外的任何内容使用通配符过滤器。所以这个
。\Vic???\Doc*\*.pdf
不会返回我本地机器上
C:\Users\Victor\Documents
下的pdf文件,而是在路径中使用
非法字符崩溃<代码>文件信息
目录信息
?你需要什么样的模拟物?这些应该可以。@Oded:我正在寻找基于筛选器返回FileInfo数组/列表/可枚举的正确函数。那么为什么不查看
FileInfo
DirectoryInfo
MSDN页面呢?第一个呼叫端口,您就会找到您的答案。@Oded:它们都不能像Powershell那样工作。例如,EnumerateFileSystemInfo似乎不喜欢对文件名以外的任何内容使用通配符过滤器。因此,此
。\Vic???\Doc*\*.pdf
不会在我的本地计算机上返回
C:\Users\Victor\Documents
下的pdf文件,而是在路径中使用
非法字符崩溃。VS抱怨
EnumerateFileSystemInfo
在当前上下文中不存在。如果我删除它并只留下两个参数,它会说非静态成员需要对象引用。像
。\bin\Release\XmlCon???\*.xml
?似乎
EnumerateFileSystemInfo
无法处理它们。@neolick:你确定吗?链接页面显示了什么?和*作为有效的搜索词。@Guvante:是的,我试过了。问题是,如果<代码> >代码>和<代码> */COD>在路径的中间,如上文,它们不被认为是有效的。@ NeOLISK:您需要搜索与中间路径匹配的所有目录,然后在这些目录中搜索文件。VS抱怨当前上下文中不存在
EnumerateFileSystemInfo
。如果我删除它并只留下两个参数,它会说非静态成员需要对象引用。像
。\bin\Release\XmlCon???\*.xml
?似乎
EnumerateFileSystemInfo
无法处理它们。@neolick:你确定吗?链接页面显示了什么?和*作为有效的搜索词。@Guvante:是的,我试过了。问题是,如果<代码> >代码>和>代码> */COD>在路径的中间,例如上面,它们不被认为是有效的。@ NeOLISK:您需要搜索与中间路径匹配的所有目录,然后搜索这些目录以获取文件。如果不能将路径分隔为文件夹+扩展过滤器,会怎样?例如
。\bin\Release\XmlCon???\*.xml
?@neolik:我添加了最后一个参数来演示如何使用它。您阅读了我上面的评论吗?您的示例假设将有一个根路径,并且我将仅通过下面的文件掩码进行过滤。如果还有文件夹掩码呢?Powershell的dir可以很好地处理这种情况。@neolik:啊,我以为你只是想搜索bin\release的所有内容,这个标志控制着它。还有一种方法允许枚举文件对象,并且应该提供这种功能。它解决了
bin/release
的问题(至少目前是这样),但还有另一种方法,它与我们的遗留系统如何保存文件(非dotNET)有关。例如,您可以拥有
bla???
文件夹,其中
??
是一个随机的4位数字,您需要在部署中包含所有这些文件夹。所以你会有一些过滤器,比如
c:\appname\bla???\*.png
。如果我不能将路径分离到文件夹+扩展过滤器中怎么办?例如
。\bin\Release\XmlCon???\*.xml
?@neolik:我添加了最后一个参数来演示如何使用它。您阅读了我上面的评论吗?您的示例假设将有一个根路径,并且我将仅通过下面的文件掩码进行过滤。如果还有文件夹掩码呢?Powershell的dir可以很好地处理这种情况。@neolik:啊,我以为你只是想搜索bin\release的所有内容,这个标志控制着它。还有另一种方法允许
var searchDir = new DirectoryInfo("..\\bin\\Release\\XmlConfig\\");
foreach (var fileSystemInfo in searchDir.EnumerateFileSystemInfos("*.xml"))
{
    Console.WriteLine(fileSystemInfo);
}