Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在目录中搜索.NET中多种类型的所有文件_C#_.net_.net 2.0 - Fatal编程技术网

C# 在目录中搜索.NET中多种类型的所有文件

C# 在目录中搜索.NET中多种类型的所有文件,c#,.net,.net-2.0,C#,.net,.net 2.0,假设我有一个类似“.vcproj;.csproj;*.sln”的字符串,我想在一个目录中显示这些类型的所有文件。。。Windows总是通过打开文件对话框来实现这一点 我知道Directory.GetFiles,但它只允许我运行给定的搜索模式,因此我必须拆分输入,然后循环每个输入 在“打开文件”对话框完成所有操作之后,是否没有内置功能来执行此操作 NET 2,所以没有LINQ聪明是可用的 试着这样做: string[] formats = {".jpg", ".png", ".txt"}; var

假设我有一个类似“.vcproj;.csproj;*.sln”的字符串,我想在一个目录中显示这些类型的所有文件。。。Windows总是通过打开文件对话框来实现这一点

我知道
Directory.GetFiles
,但它只允许我运行给定的搜索模式,因此我必须拆分输入,然后循环每个输入

在“打开文件”对话框完成所有操作之后,是否没有内置功能来执行此操作

NET 2,所以没有LINQ聪明是可用的

试着这样做:

string[] formats = {".jpg", ".png", ".txt"};
var files = Directory.GetFiles("C:\\");
var neededFiles = files.
    Where(file => formats.Any(file.EndsWith)).
    ToArray();
或者,对于.NET 2.0:

var desiredFiles = new List<string>(files.Length);
foreach (var file in files)
{
    foreach (var format in formats)
        if (file.EndsWith(format))
        {
            desiredFiles.Add(file);
            break;
        }
}
var desiredFiles=新列表(files.Length);
foreach(文件中的var文件)
{
foreach(格式中的var格式)
if(文件.EndsWith(格式))
{
desiredFiles.Add(文件);
打破
}
}
尝试以下方法:

string[] formats = {".jpg", ".png", ".txt"};
var files = Directory.GetFiles("C:\\");
var neededFiles = files.
    Where(file => formats.Any(file.EndsWith)).
    ToArray();
或者,对于.NET 2.0:

var desiredFiles = new List<string>(files.Length);
foreach (var file in files)
{
    foreach (var format in formats)
        if (file.EndsWith(format))
        {
            desiredFiles.Add(file);
            break;
        }
}
var desiredFiles=新列表(files.Length);
foreach(文件中的var文件)
{
foreach(格式中的var格式)
if(文件.EndsWith(格式))
{
desiredFiles.Add(文件);
打破
}
}

您可以使用垂直管道“|”来进行安装。我认为您的最终代码应该如下所示:

string input_files = ".vcproj;.csproj;*.sln";
string search_for = input_files.Replace(".","\.").Replace(";","|")

Directory.GetFiles("/path/to/directory",search_for)

我从未在.NET中进行过任何编码,因此如果我的语法不正确,我深表歉意。显然,如果搜索词的初始字符串以有效的正则表达式形式开始,您可以节省一些时间。

您可以使用垂直管道“|”进行搜索。我认为您的最终代码应该如下所示:

string input_files = ".vcproj;.csproj;*.sln";
string search_for = input_files.Replace(".","\.").Replace(";","|")

Directory.GetFiles("/path/to/directory",search_for)


我从未在.NET中进行过任何编码,因此如果我的语法不正确,我深表歉意。显然,如果搜索词的初始字符串以有效的正则表达式形式开始,您可以节省一些时间。

可能重复的查看此问题的答案:可能重复的查看此问题的答案:此使用linq,但他无法use@TimothyP哎呀。我会解决的。我想你可以,这就是为什么我没有发布我自己的回复,这是你的:)@TimothyP我敢打赌作者最初要求所有文件都有特定的文件名和格式,但你的第一次编辑是合法的。关于中断,是为了避免无用的检查。没有它,即使文件被识别为.jpg(例如),也会对所有其他格式执行比较。我正在把中断放回去。啊,是的。。。就像那样,好吧,对不起,现在我意识到这个中断是完全有效的。他使用linq,但他不能use@TimothyP哎呀。我会解决的。我想你可以,这就是为什么我没有发布我自己的回复,这是你的:)@TimothyP我敢打赌作者最初要求所有文件都有特定的文件名和格式,但你的第一次编辑是合法的。关于中断,是为了避免无用的检查。没有它,即使文件被识别为.jpg(例如),也会对所有其他格式执行比较。我正在把中断放回去。啊,是的。。。就像那样,好吧,对不起,现在我意识到中断是完全有效的GetFiles不支持该语法的哪一部分?我要说的是:只支持单个过滤器,例如“.jpg”,但不支持“.jpg |*.png”。此外,它是Replace而不是Replace,您需要在\前面加上另一个\前缀,否则它是用于\转义的转义字符。因为在匹配表达式中。通常表示非换行符[^\n]的任何单个字符的通配符。仔细查看文档,我可以发现只允许匹配字符是?因此,管道无法工作,管道泄漏。不需要。@TimothyP-您的解决方案更好,但他可以通过RegEx方法Matches从Directory.GetFiles(“/path/to/Directory”)传递字符串[],对吗?是的,你是对的,事实上这也是他问题的一部分+1 GetFiles不支持该语法的哪一部分?我要说的是:只支持单个过滤器,例如“.jpg”,但不支持“.jpg |*.png”。此外,它是Replace而不是Replace,您需要在\前面加上另一个\前缀,否则它是用于\转义的转义字符。因为在匹配表达式中。通常表示非换行符[^\n]的任何单个字符的通配符。仔细查看文档,我可以发现只允许匹配字符是?因此,管道无法工作,管道泄漏。不需要。@TimothyP-您的解决方案更好,但他可以通过RegEx方法Matches从Directory.GetFiles(“/path/to/Directory”)传递字符串[],对吗?是的,你是对的,事实上这也是他的问题+1的一部分