C# 在C中使用部分名称搜索目录中的文件#
我需要使用部分名称搜索目录中的文件 例: 我在下面试过了C# 在C中使用部分名称搜索目录中的文件#,c#,C#,我需要使用部分名称搜索目录中的文件 例: 我在下面试过了 Directory.GetFiles("c:\Path", "*005296-895632-12563*.xml", SearchOption.AllDirectories). 但它不起作用 示例文件名为: Error_005296-895632-12563.xml 005296-895632-12563_Response.xml Duplicate_005296-895632-12563_Response.xml 这是我用来搜索目
Directory.GetFiles("c:\Path", "*005296-895632-12563*.xml", SearchOption.AllDirectories).
但它不起作用
示例文件名为:
Error_005296-895632-12563.xml
005296-895632-12563_Response.xml
Duplicate_005296-895632-12563_Response.xml
这是我用来搜索目录的扩展函数
public static IEnumerable<string> GetFiles(string path, string searchPatternExpression = "", SearchOption searchOption = SearchOption.AllDirectories)
{
Regex reSearchPattern = new Regex(searchPatternExpression);
return Directory.EnumerateFiles(path, "*", searchOption).Where(file => reSearchPattern.IsMatch(System.IO.Path.GetExtension(file)));
}
公共静态IEnumerable GetFiles(字符串路径,字符串searchPatternExpression=“”,SearchOption SearchOption=SearchOption.allDirectory)
{
Regex reSearchPattern=新的Regex(searchpattern表达式);
返回Directory.EnumerateFiles(路径“*”,searchOption).Where(文件=>reSearchPattern.IsMatch(System.IO.path.GetExtension(文件));
}
您可以创建扩展方法并传递要查找的部分名称数组
像这样调用扩展方法
DirectoryInfo dir = new DirectoryInfo(@"c:\demo");
FileInfo[] files = dir.GetFilesBypartialName("Anc_def_", "ABC_123", "12_qweqweqw_123").ToArray();
下面是扩展方法
public static class DirectoryFindFile
{
public static IEnumerable<FileInfo> GetFilesBypartialName(this DirectoryInfo dirInfo, params string[] partialFilenames)
{
if (partialFilenames == null)
throw new ArgumentNullException("partialFilenames");
var lstpartialFilenames = new HashSet<string>(partialFilenames, StringComparer.OrdinalIgnoreCase);
return dirInfo.EnumerateFiles()
.Where(f => lstpartialFilenames.Contains(f.Name));
}
public static IEnumerable<FileInfo> GetFilesBypartialFilenamesAllDir(this DirectoryInfo dirInfo, params string[] partialFilenames)
{
if (partialFilenames == null)
throw new ArgumentNullException("partialFilenames");
var lstpartialFilenames = new HashSet<string>(partialFilenames, StringComparer.OrdinalIgnoreCase);
return dirInfo.EnumerateFiles("*.*", SearchOption.AllDirectories)
.Where(f => lstpartialFilenames.Contains(f.Name));
}
}
公共静态类DirectoryFindFile
{
公共静态IEnumerable GetFilesBypartialName(此DirectoryInfo dirInfo,参数字符串[]PartialFileName)
{
if(partialFilenames==null)
抛出新ArgumentNullException(“partialFilenames”);
var lstpartialFilenames=新哈希集(partialFilenames,StringComparer.OrdinalIgnoreCase);
返回dirInfo.EnumerateFiles()
其中(f=>lstpartialFilenames.Contains(f.Name));
}
公共静态IEnumerable GetFilesBypartialFilenamesAllDir(此DirectoryInfo-dirInfo,参数字符串[]partialFilenames)
{
if(partialFilenames==null)
抛出新ArgumentNullException(“partialFilenames”);
var lstpartialFilenames=新哈希集(partialFilenames,StringComparer.OrdinalIgnoreCase);
返回dirInfo.EnumerateFiles(“**”,SearchOption.AllDirectory)
其中(f=>lstpartialFilenames.Contains(f.Name));
}
}
可能有助于复制:您甚至不需要正则表达式或模式,只需在目录中的文件名上循环并使用字符串即可。包含的内容将因语言而异。请选择c#或vb.net
public static class DirectoryFindFile
{
public static IEnumerable<FileInfo> GetFilesBypartialName(this DirectoryInfo dirInfo, params string[] partialFilenames)
{
if (partialFilenames == null)
throw new ArgumentNullException("partialFilenames");
var lstpartialFilenames = new HashSet<string>(partialFilenames, StringComparer.OrdinalIgnoreCase);
return dirInfo.EnumerateFiles()
.Where(f => lstpartialFilenames.Contains(f.Name));
}
public static IEnumerable<FileInfo> GetFilesBypartialFilenamesAllDir(this DirectoryInfo dirInfo, params string[] partialFilenames)
{
if (partialFilenames == null)
throw new ArgumentNullException("partialFilenames");
var lstpartialFilenames = new HashSet<string>(partialFilenames, StringComparer.OrdinalIgnoreCase);
return dirInfo.EnumerateFiles("*.*", SearchOption.AllDirectories)
.Where(f => lstpartialFilenames.Contains(f.Name));
}
}