gpt4 book ai didi

c# - 如果文件格式与列表中的任何内容匹配,则改进 C# 中的测试方法

转载 作者:太空宇宙 更新时间:2023-11-03 21:17:17 25 4
gpt4 key购买 nike

简而言之,我正在构建类似节点结构的 TreeView 。我遍历每个文件夹和文件夹中的每个文件以查找特定的文件格式。我知道我为 IsValidFileFormat 使用的函数并不理想。我希望能够将文件格式列表传递给它,例如 {.txt、.ms、.png},并且在第一次测试返回 true 时返回 True。这样,如果不需要,它就不会继续循环遍历其他格式。

下面的示例使用 try catch 遍历每个目录,因此它不会在没有权限的文件夹上出错。

// tests if given filepath has a compatible extension
static bool IsValidFileType(string filename)
{
bool results = false;

string ext = Path.GetExtension(filename);
// add multiple acceptable file extensions
if (string.Equals(".mse", ext, StringComparison.OrdinalIgnoreCase)) return true;
if (string.Equals(".ms", ext, StringComparison.OrdinalIgnoreCase)) return true;

return results;
}

public static TreeNode CreateDirectoryNode(DirectoryInfo directoryInfo)
{
var directoryNode = new TreeNode(directoryInfo.Name);

foreach (var directory in directoryInfo.GetDirectories())
{
try
{
// ignore direcotories which start with an 'underscore'
if (!directory.Name.StartsWith("_"))
{
directoryNode.Nodes.Add(CreateDirectoryNode(directory));
}
}
catch (UnauthorizedAccessException) { }
}
foreach (var file in directoryInfo.GetFiles())
{
if (IsValidFileType(file.FullName))
{
TreeNode node = new TreeNode(file.Name, 1, 1);
node.Tag = file.FullName;
node.ForeColor = toolColor;
directoryNode.Nodes.Add(node);

// add to global fileList which is used for searches
fileList.Add(file.FullName);
}
}
// if (directoryNode.Nodes.Count != 0)
return directoryNode;
}

最佳答案

你可以像这样做一个扩展方法:-

public static IEnumerable<FileInfo> GetFilesByExtensions(this DirectoryInfo dir,
params string[] extensions)
{
if (extensions == null)
throw new ArgumentNullException("extensions");
IEnumerable<FileInfo> files = dir.EnumerateFiles();
return files.Where(f => extensions.Contains(f.Extension));
}

以及类似的用法:

directoryInfo.GetFilesByExtensions(".ms",".mse")

这将只返回您感兴趣的文件。

关于c# - 如果文件格式与列表中的任何内容匹配,则改进 C# 中的测试方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33176800/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com