DirectoryInfo.GetFiles(searchPattern)行为奇怪,并返回与searchPattern不匹配的随机文件

时间:2010-10-19 18:37:36

标签: .net vb.net directoryinfo

我有一些旧的遗留代码我正在维护(请原谅命名,这是由非程序员编写的,应用程序不够重要,不能重写):

Dim Path3 As String
Path3 = "C:\Inetpub\wwwroot\uscgcrc\rsa\RSADocuments\IRBCorrespondenceToPI\"

Dim dirInfo3 As New DirectoryInfo(Path3)

Dim FileContainer3 As FileInfo() = dirInfo3.GetFiles("1370*.*")

Dim FileOnly3 As FileInfo
For Each FileOnly3 In FileContainer3
    Response.Write("<tr style='border: 1px solid #000000;'><td>")
    Response.Write("<a href='https://www.uscgcrc.org/rsa/RSADocuments/IRBCorrespondenceToPI/" + FileOnly3.Name + "'>" + FileOnly3.Name + "</a><br>")
    Response.Write("</td></tr>")
Next FileOnly3

返回的文件是:
1302_IRBCorr_04-27-10.pdf
1302_IRBCorr_06-10-10.pdf
1309_IRBCorr_04-08-10.pdf
1309_IRBCorr_04-02-10.pdf
1370_1000485_IRB-Accept_with_Contingencies_Letter_09-23-10.pdf

正如您所看到的,返回的文件并不都与我传递给GetFiles的搜索模式相匹配。此代码适用于所有其他搜索模式,如(“1369 *。*”)等。

它提取的文件似乎没有任何共同点,但每次为搜索模式“1370 *。*”拉出这5个文件

这可能会发生什么?

1 个答案:

答案 0 :(得分:1)

由于这些是长文件名,因此您可能会在此API中遇到皱纹,它与完整文件名和8.3文件名相匹配。来自MSDN docs

  

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

您可以通过检查结果并忽略误报来过滤结果。对不起,这是C#代码。

string initial = "1370";
foreach (FileInfo match in FileContainer3)
{
  if (match.Name.Substring(initial.Length) != initial)
  {
    continue;
  }
}