gpt4 book ai didi

c# GetDirectories 返回意外目录(已给出具体示例)

转载 作者:行者123 更新时间:2023-11-30 17:25:43 26 4
gpt4 key购买 nike

使用 c# GetDirectories 检索搜索目录下的文件夹。该代码适用于搜索的所有其他目录,但单个目录除外。具体来说,GetDirectories 返回两个不同的文件夹,一个包含搜索模式,另一个不包含搜索模式。

在我的示例中,通配符搜索模式是 *43*

几乎尝试了我能想到的一切。
奇怪的是,如果我更改“WINCE_TEST_IMAGE_41”文件夹名称中任何一个字符的大小写,则 GetDirectories 返回与搜索模式匹配的预期(且正确)单个目录,即 "*43 *"(再次)。例如,将 "C" 更改为 "c"...然后返回包含 43 的单个目录...

设置:
我安装了 .NET Framework SDK 4.8(最新安装日期为 2019 年 9 月 3 日)。
1. 创建文件夹“C:\Temp\WINCE_OS_IMAGES”
2. 在名为的文件夹中创建子文件夹:
* "WINCE_TEST_IMAGE_40"
*“WINCE_TEST_IMAGE_41”
* "WINCE_TEST_IMAGE_42"
* "WINCE_TEST_IMAGE_43"
*“WINCE_TEST_IMAGE_44”。

这样目录结构为:

C:\Temp      \WINCE_OS_IMAGES            \WINCE_TEST_IMAGE40            \WINCE_TEST_IMAGE41            \WINCE_TEST_IMAGE42            \WINCE_TEST_IMAGE43            \WINCE_TEST_IMAGE44

Code:
v is a parameter input to the method so I have assigned a value to help reproduce the issue.

string v = "43";

string[] dirs2 = Directory.GetDirectories(@"C:\Temp\WINCE_OS_IMAGES", "*" +
v + "*", SearchOption.TopDirectoryOnly);

foreach (string str in dirs2)
{
Console.WriteLine(str);
}

预期:GetDirectories 语句仅返回以 "43" 结尾的目录。

实际:
GetDirectories 语句返回两个目录,一个以 "41" 结尾,另一个以 "43" 结尾。

最佳答案

documentation for GetFiles (没有找到 GetDirectories 的声明)说:

Note
Because this method checks against file names with both the 8.3 file name format and the long file name format, a search pattern similar to "*1*.txt" may return unexpected file names. For example, using a search pattern of "*1*.txt" returns "longfilename.txt" because the equivalent 8.3 file name format is "LONGFI~1.TXT".

我假设 GetDirectories 也是如此。

因此,您必须自己过滤结果(例如使用正则表达式或使用 string.Contains())。

var dirs2 = Directory.GetDirectories(@"C:\Temp\WINCE_OS_IMAGES", "*" + 
v + "*", SearchOption.TopDirectoryOnly)
.Where(d => d.Contains(v));

foreach (string str in dirs2)
{
Console.WriteLine(str);
}

注意:您搜索的是数字,因此字符大小写不是问题。如果您需要不区分大小写的搜索,则不能简单地使用 Contains,因为它没有允许不区分大小写搜索的重载。你可以使用 Colonel Panic's answer问题Case insensitive 'Contains(string)'或比较

v = v.ToLowerInvariant();
...
.Where(d => d.ToLowerInvariant().Contains(v));

关于c# GetDirectories 返回意外目录(已给出具体示例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57776897/

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