try
{
string[] SetupFolderKeywords = {"Setup", "Installed"};
DirectoryInfo SearchedDirectory = new DirectoryInfo(Game.SelectedPath);
FileSystemInfo[] filesAndDirs = SearchedDirectory.GetFileSystemInfos($"*{SetupFolderKeywords[0]}*|*{SetupFolderKeywords[1]}*"); // <-- This doesn't work
// FileSystemInfo[] filesAndDirs = SearchedDirectory.GetFileSystemInfos("*" + SetupFolderKeywords[0] + "*"); <-- This Works
foreach (FileSystemInfo foundFile in filesAndDirs)
{
string FullName = foundFile.FullName;
MessageBox.Show(FullName);
}
}
catch (IOException ExpMoveFolder)
{
MessageBox.Show(Convert.ToString(ExpMoveFolder));
}
我试图在Game.SelectedPath目录中查找包含关键字“Setup”或“Installed”的文件夹(我使用FolderBrowserDialog选择了此文件夹),并使MessageBox显示其路径。
当我尝试搜索与某个关键字匹配的文件夹时,MessageBox显示该文件夹的路径。它工作得很好,但当我尝试搜索关键字“Setup”或“Installed”时,MessageBox根本不显示。
当我尝试查找其中任何一个关键字而不是只查找一个关键字时,visual studio中没有出现错误消息或警告,也没有发生程序异常。
1条答案
按热度按时间dw1jzc5e1#
你不能用一个调用来搜索多个模式。你尝试的布尔表达式只被解释为一个模式,当然,没有匹配该模式的条目。如果你想匹配多个模式,你必须进行多个调用。一个选项可能是这样的:
编辑:
我刚创建了这个文件夹:
然后执行以下代码:
这基本上就是我在上面发布的内容,只是我在
EnumerateFileSystemInfos
调用中添加了通配符,而原始代码要求它们已经在strings
中了。然后我将过滤器更改为:
并再次运行代码,得到以下输出:
很明显,代码完全按照它应该的方式工作,如果你做的不起作用,那么你做错了。如果你不能找出你做错了什么,我建议你更新你的问题,并添加新的相关信息。