Vb.net 搜索以数字1结尾的文件时出现问题

Vb.net 搜索以数字1结尾的文件时出现问题,vb.net,Vb.net,我有一个文件夹的文件和他们的名字看起来像这样 FileA1.ext FileA2.ext FileA3.ext FileA4.ext FileA5.ext FileA6.ext FileB1.ext FileB2.ext FileB3.ext FileB4.ext FileB5.ext FileB6.ext FileC1.ext FileC2.ext FileC3.ext FileC4.ext FileC5.ext FileC6.ext 从这个文件夹中,假设我想搜索并找到以数字2结尾的每个

我有一个文件夹的文件和他们的名字看起来像这样

FileA1.ext
FileA2.ext
FileA3.ext
FileA4.ext
FileA5.ext
FileA6.ext

FileB1.ext
FileB2.ext
FileB3.ext
FileB4.ext
FileB5.ext
FileB6.ext

FileC1.ext
FileC2.ext
FileC3.ext
FileC4.ext
FileC5.ext
FileC6.ext
从这个文件夹中,假设我想搜索并找到以数字2结尾的每个
.ext
文件。在我的代码中使用
列表框
和每个的
,我正在这样做

For Each FoundFile As String In My.Computer.FileSystem.GetFiles(_Path, FileIO.SearchOption.SearchAllSubDirectories, "*2.ext")
    ListBox1.Items.Add(FoundFile)
Next

但是,如果我在我的
列表框中搜索每个以数字1结尾的文件,我也会看到以数字5和6结尾的文件!!!这只发生在1号上!!!有什么想法吗?

这是一个已知的问题。微软是这么说的:

由于此方法检查8.3文件名格式和长文件名格式的文件名,因此类似于“*1*.txt”的搜索模式可能会返回意外的文件名。例如,使用“*1*.txt”搜索模式会返回“longfilename.txt”,因为等效的8.3文件名格式是“LONGFI~1.txt”

摘自:


我的建议

尝试用问号(?)替换星号(*)

编辑

如果文件名中的后缀不同,可以尝试以下方法:

FileIO.SearchOption.SearchAllSubDirectories, "*1?ext")

我不确定这是否会欺骗解析器,但值得一试。

这是一个已知的问题。微软是这么说的:

由于此方法检查8.3文件名格式和长文件名格式的文件名,因此类似于“*1*.txt”的搜索模式可能会返回意外的文件名。例如,使用“*1*.txt”搜索模式会返回“longfilename.txt”,因为等效的8.3文件名格式是“LONGFI~1.txt”

摘自:


我的建议

尝试用问号(?)替换星号(*)

编辑

如果文件名中的后缀不同,可以尝试以下方法:

FileIO.SearchOption.SearchAllSubDirectories, "*1?ext")

我不确定这是否会欺骗解析器,但值得一试。

文件名的“File”部分在我的任何文件中都不相同。我这样做只是为了举例。。。还有别的想法吗?因为如果我这样做
FileIO.SearchOption.SearchAllSubDirectories,“?1.ext”)
我什么也得不到!!!关于你的编辑。。。如果我尝试
FileIO.SearchOption.SearchAllSubDirectories,“?1ext”)
我什么也得不到,如果我尝试
FileIO.SearchOption.SearchAllSubDirectories,“?1.ext”)
我得到了我的第一个问题!!!对不起,但是我不知道如何正确地解决它。最后一个选项似乎是读取整个文件列表,然后在
*1.ext
的情况下自己过滤它。你可以用IF-THEN-ELSE来控制它,这样你就只需要在这种情况下自己做了。好的,我会试试这样的!!!非常感谢您抽出时间!!!:)@SimonetosTheGreek您可以使用类似于
ListBox1.Items.AddRange(Directory.GetFiles(_Path,*.ext),SearchOption.AllDirectories)。Where(Function(f)Path.GetFileNameWithoutExtension(f)。EndsWith(“1”)。ToArray())
。(这需要在代码顶部添加一个
Imports System.IO
。)文件名的“File”部分在我的任何文件中都不相同。我这样做只是为了举例。。。还有别的想法吗?因为如果我这样做
FileIO.SearchOption.SearchAllSubDirectories,“?1.ext”)
我什么也得不到!!!关于你的编辑。。。如果我尝试
FileIO.SearchOption.SearchAllSubDirectories,“?1ext”)
我什么也得不到,如果我尝试
FileIO.SearchOption.SearchAllSubDirectories,“?1.ext”)
我得到了我的第一个问题!!!对不起,但是我不知道如何正确地解决它。最后一个选项似乎是读取整个文件列表,然后在
*1.ext
的情况下自己过滤它。你可以用IF-THEN-ELSE来控制它,这样你就只需要在这种情况下自己做了。好的,我会试试这样的!!!非常感谢您抽出时间!!!:)@SimonetosTheGreek您可以使用类似于
ListBox1.Items.AddRange(Directory.GetFiles(_Path,*.ext),SearchOption.AllDirectories)。Where(Function(f)Path.GetFileNameWithoutExtension(f)。EndsWith(“1”)。ToArray())
。(这需要在代码顶部添加一个
Imports System.IO