2012-06-28 98 views
1

我想显示在任何位置都具有“33”的所有PDF文件名。在PDFFiles文件夹如何获取VB.NET目录中的所有文件名

样本PDF列表

1111.pdf 
3311.pdf 
2222.pdf 
2331.pdf 
1234.pdf 
1233.pdf 

我需要得到这个样子,那是后话通配符%33%在SQL

3311.pdf 
2331.pdf 
1233.pdf 

我想这一个

Me.ListBox1.Items.AddRange(Directory.GetFiles("C:\PDFFiles", "*33*" & ".PDF", SearchOption.AllDirectories)) 

,但它仍然显示所有的PDF文件。

1111.pdf 
3311.pdf 
2222.pdf 
2331.pdf 
1234.pdf 
1233.pdf 

Me.ListBox1.Items.AddRange(Directory.GetFiles("C:\PDFFiles", "*33" & ".PDF", SearchOption.AllDirectories)) 

但只得到问候

1233.pdf //this get all filename that ends with 33 

感谢

+0

为什么顶端的代码不工作 - 围绕33个外卡字符?我可以看到为什么底线只返回一个sinlge文件。 –

+1

@Downvoter,为什么downvote? – BizApps

回答

2

通配符的模式匹配算法是相当奇怪的,如果你正在使用正则表达式。通过Windows 3,MS-DOS,CP/M(用于8位机器的操作系统)和RSX(在16位DEC机器上的操作系统)回溯了很多历史。他们之间有很多借款,包括通配符行为。一些意外的共同点顺便说一下,大卫卡特勒是第一个和最后一个背后的首席架构师。

Anyhoo,*33*不会工作。你需要应用你自己的过滤器。搜索*.**.pdf并使用Path.GetFileNameWithoutExtension()和String.Contains()查找匹配项。

0

您在"*33"年底失踪*,放多了一个明星在结束如"*33*"

您当前的表达: Directory.GetFileName()

: “* 33” & “.PDF” 的意思,所有的文件,该文件与33.PDF这就是为什么你得到1233.pdf,而不是2331.pdf

编辑结束的名字与"*1*.txt"类似的搜索模式可能会返回意外的文件名。 例如,使用“ .txt”的搜索模式将返回 “longfilename.txt”,因为等效的8.3文件名格式为 “LONGFI〜1.TXT”。

+0

我已经尝试过,但我不工作.. – BizApps

+0

@BizApps:你是什么意思,“不起作用”? –

+0

@BizApps,你有多个GetFiles语句在你的文章中,顶部应该有效,可能你正在尝试第二个 – Habib

2

当使用多个*时,我也注意到了这种行为。

我解决它通过让所有文件名,然后使用LINQ过滤正确的名称:

Dim allFileNames as String() = _ 
    Directory.GetFiles("C:\PDFFiles", "*.PDF", SearchOption.AllDirectories) 
Dim filtered As IEnumerable(Of String) = _ 
    .Where(Function(fileName) Path.GetFileNameWithoutExtension(fileName).Contains("33")) 
+0

嗨@Erno我应该在allFileNames中使用哪些对象并进行过滤?我正在使用VB.NEt – BizApps

0

我们已经发现,

筛选如果字符串lenght大于或等于4

所以,如果我想有测试名称值的所有记录*___*工作:

test1234.pdf 
abcdefg.pdf 
123test45.pdf 
12345678.pdf 

我的过滤器应该是:"*test" & ".PDF"会得到期望的结果

test1234.pdf 
123test45.pdf 

FYI

相关问题