提问人:Neeraj Kumar Gupta 提问时间:5/12/2023 最后编辑:Neeraj Kumar Gupta 更新时间:5/12/2023 访问量:80
使用 C 通过模式匹配搜索 drectory 中的文件#
Search the files in drectory with pattern matching using C#
问:
我正在努力将 vb.net 中的旧 Windown 表单应用程序迁移到 .net 核心 api (C#)。
有一个用 VB.net 编写的代码语句来搜索目录中的文件
Function HasDoc(ByVal branch As String, ByVal sender As String, ByVal appName As String) As Boolean
Dim strPath = "T:\" + appName + branch + "\" + sender + "\_" + branch + "_*.*"
dim ls_files = Dir(strPath, FileAttribute.Archive)
dim bolExist as Boolean
If ls_files = Nothing Then
bolExist = False
Else
bolExist = True
End If
return bolExist
End Function
我正在使用 c# 语句复制以下代码行
dim ls_files = Dir(strPath, FileAttribute.Archive)
C# 代码
public bool HasDoc(string appName, string branch, string sender)
{
var filesPath = "T:\\" + appName + branch + @"\" + sender;
var strPatt = "_" + branch + "_*.*";
if (System.IO.Directory.Exists(filesPath))
return Directory.EnumerateFiles(filesPath, strPatt).Any();
return false;
}
我用 C# 编写的代码,性能很慢,而且我不确定如何使用?遗留代码的性能比我的要快,上面代码搜索文件的文件位置包含数百万个文档。FileAttribute.Archive
请建议我可以使用什么来复制相同的 Vb.net 代码行为
答:
该调用将搜索与模式匹配并设置了属性的文件。 实际上是一个 VB6 函数,它保留在 VB.NET 中只是为了方便迁移到新环境。在它下面使用与 C# 相同的类,例如 DirectoryInfo.GetFileSystemInfos。无法按属性进行筛选,因此实现会循环访问所有文件并检查其属性。Dir(strPath, FileAttribute.Archive)
Archive
Dir
便利库允许您使用与 VB.NET 相同的函数,例如 Dir,但这些函数现在很少使用。Microsoft.VisualBasic.*
可以直接在 C# 中使用该类。 返回一个数组,其中包含表示文件夹的所有内容(包括目录和文件)的对象。您可以改用 return an,该 an 仅在您读取项目时返回它们。由于您只想要文件,因此可以使用 代替 .这将返回一个而不是 ,它允许您检查文件的属性。DirectoryInfo
GetFileSystemInfos
EnumerateFileSystemInfos
IEnumerable<>
EnumerateFiles
EnumerateFileSystemInfos
IEnumerable<FileInfo>
string[]
例如:
var dir= new DirectoryInfo(dirPath);
var pattern=$"_{branch}_*.*";
var files=dir.EnumerateFiles(pattern);
var found=files.Any(file=>file.Attributes.HasFlag(FileAttribute.Archive));
您可以交换,甚至可以查看这是否会影响性能。EnumerateFiles
GetFiles
GetFileSystemInfos
所有这些函数都接受一个 EnumerationOptions 参数,该参数可用于指定递归深度、缓冲区大小等。
var options=new EnumerationOptions {
BufferSize = 16384
};
var files=dir.EnumerateFiles(pattern,options );
评论
filesPath
performance is very slow
System.IO.Directory
Dir