0

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

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个文件

这里到底发生了什么?

4

1 回答 1

1

由于这些是长文件名,您可能在此 API 中遇到了问题,它与完整文件名和 8.3 文件名匹配。从MSDN 文档

因为此方法会检查具有 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;
  }
}
于 2010-10-19T18:47:35.317 回答