C# 获取目录中只有3个扩展名和数字的文件列表
我正在使用以下代码:C# 获取目录中只有3个扩展名和数字的文件列表,c#,getfiles,C#,Getfiles,我正在使用以下代码: var list = Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory, _globalSetting.CompanyCode + "trn*.???", SearchOption.TopDirectoryOnly).ToList(); foreach (var listitem in list) { listBox_Files.Items.Add(Path.GetFileName(lis
var list = Directory.GetFiles(AppDomain.CurrentDomain.BaseDirectory, _globalSetting.CompanyCode + "trn*.???", SearchOption.TopDirectoryOnly).ToList();
foreach (var listitem in list)
{
listBox_Files.Items.Add(Path.GetFileName(listitem));
}
但它给了我比我需要的更多。我希望它只给我3个扩展名的文件,如果可以的话,只给那些有数字的文件。我试过了???但它给了我这个:
WEBTRN25.000
WEBTRN25.001
WEBTRN25.000_copy
WEBTRN34.ABC
我也试过了,但没有结果
这就是我希望它能回报的:
WEBTRN25.000
WEBTRN25.001
有什么建议吗?您可以使用正则表达式来确保文件名以[dot then three number]结尾
.*\\.[0-9]{3}$
或者类似的您可以使用正则表达式来确保文件名以[dot then three number]结尾
.*\\.[0-9]{3}$
或者类似的您可以使用正则表达式来确保文件名以[dot then three number]结尾
.*\\.[0-9]{3}$
或者类似的您可以使用正则表达式来确保文件名以[dot then three number]结尾
.*\\.[0-9]{3}$
或者类似的东西您可以将正则表达式与Linq子句组合,其中
Regex r = new Regex(@"^\.\d\d\d$");
var list = Directory.EnumerateFiles(AppDomain.CurrentDomain.BaseDirectory,
_globalSetting.CompanyCode + "trn*.*",
SearchOption.TopDirectoryOnly)
.Where(x => r.IsMatch(Path.GetExtension(x)));
请注意,我已将您对GetFiles的调用替换为EnumerateFiles。此方法允许在读取整个目录列表之前启动集合的枚举。因此,EnumerateFiles(如果目录中有许多文件)可能会更有效。可以将正则表达式与Linq子句结合起来,其中
Regex r = new Regex(@"^\.\d\d\d$");
var list = Directory.EnumerateFiles(AppDomain.CurrentDomain.BaseDirectory,
_globalSetting.CompanyCode + "trn*.*",
SearchOption.TopDirectoryOnly)
.Where(x => r.IsMatch(Path.GetExtension(x)));
请注意,我已将您对GetFiles的调用替换为EnumerateFiles。此方法允许在读取整个目录列表之前启动集合的枚举。因此,EnumerateFiles(如果目录中有许多文件)可能会更有效。可以将正则表达式与Linq子句结合起来,其中
Regex r = new Regex(@"^\.\d\d\d$");
var list = Directory.EnumerateFiles(AppDomain.CurrentDomain.BaseDirectory,
_globalSetting.CompanyCode + "trn*.*",
SearchOption.TopDirectoryOnly)
.Where(x => r.IsMatch(Path.GetExtension(x)));
请注意,我已将您对GetFiles的调用替换为EnumerateFiles。此方法允许在读取整个目录列表之前启动集合的枚举。因此,EnumerateFiles(如果目录中有许多文件)可能会更有效。可以将正则表达式与Linq子句结合起来,其中
Regex r = new Regex(@"^\.\d\d\d$");
var list = Directory.EnumerateFiles(AppDomain.CurrentDomain.BaseDirectory,
_globalSetting.CompanyCode + "trn*.*",
SearchOption.TopDirectoryOnly)
.Where(x => r.IsMatch(Path.GetExtension(x)));
请注意,我已将您对GetFiles的调用替换为EnumerateFiles。此方法允许在读取整个目录列表之前启动集合的枚举。因此,枚举文件(如果目录中有许多文件)可能更有效。尝试使用LINQ:
var list=Directory.GetFiles(“”)。其中(a=>Regex.IsMatch(a,@“\d\d”)).ToList().Foreach((b)=>Path.GetFileName(b))代码>。您不需要foreach循环尝试使用LINQ:
var list=Directory.GetFiles(“”)。其中(a=>Regex.IsMatch(a,@“\d\d”)).ToList().Foreach((b)=>Path.GetFileName(b))代码>。您不需要foreach循环尝试使用LINQ:
var list=Directory.GetFiles(“”)。其中(a=>Regex.IsMatch(a,@“\d\d”)).ToList().Foreach((b)=>Path.GetFileName(b))代码>。您不需要foreach循环尝试使用LINQ:
var list=Directory.GetFiles(“”)。其中(a=>Regex.IsMatch(a,@“\d\d”)).ToList().Foreach((b)=>Path.GetFileName(b))代码>。您不需要foreach循环,这是使用简单的searchPattern
参数无法实现的。你可以为这个想法写一个快速的正则表达式。类似这样的内容:/^.+\.[0-9]{3}$/
+1@Diamondo25尝试获取所有文件,然后使用linq和正则表达式进行筛选。使用简单的搜索模式
参数是不可能的。你可以为这个想法写一个快速的正则表达式。类似这样的内容:/^.+\.[0-9]{3}$/
+1@Diamondo25尝试获取所有文件,然后使用linq和正则表达式进行筛选。使用简单的搜索模式
参数是不可能的。你可以为这个想法写一个快速的正则表达式。类似这样的内容:/^.+\.[0-9]{3}$/
+1@Diamondo25尝试获取所有文件,然后使用linq和正则表达式进行筛选。使用简单的搜索模式
参数是不可能的。你可以为这个想法写一个快速的正则表达式。类似这样:/^.+\.[0-9]{3}$/
+1@Diamondo25尝试获取所有文件,然后使用linq和正则表达式进行筛选。这仍然为我提供了WEBTRN25.000\u副本,但我使用Path.GetExtension(listitem)检查了扩展名的长度。长度==4
并且组合有效。请刷新答案,我已经更新了正则表达式的模式。原来的PATS没有考虑GETExpRebug()返回的扩展前的点,这仍然给了我WebTrn25.000的副本,但是我检查了扩展名的长度:<代码>路径.GETFROM(ListITEM)。长度=4</CODE >并且组合工作。请刷新答案,我已经更新了正则表达式的模式。原来的PATS没有考虑GETExpRebug()返回的扩展前的点,这仍然给了我WebTrn25.000的副本,但是我检查了扩展名的长度:<代码>路径.GETFROM(ListITEM)。长度=4</CODE >并且组合工作。请刷新答案,我已经更新了正则表达式的模式。原来的PATS没有考虑GETExpRebug()返回的扩展前的点,这仍然给了我WebTrn25.000的副本,但是我检查了扩展名的长度:<代码>路径.GETFROM(ListITEM)。长度=4</CODE >并且组合工作。请刷新答案,我已经更新了正则表达式的模式。原始模式不考虑在GETExpExvice()返回的扩展前的点。