代码之家  ›  专栏  ›  技术社区  ›  Praveen Angyan

GetFiles(searchPattern)的行为异常,返回的随机文件与searchPattern不匹配

  •  0
  • Praveen Angyan  · 技术社区  · 14 年前

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

    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_Conventions_Letter_09-23-10.pdf

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

    这到底是怎么回事?

    1 回复  |  直到 14 年前
        1
  •  1
  •   Yuriy Faktorovich    14 年前

    因为这些文件名很长,所以您可能在这个API中遇到了一个问题,它与完整文件名和8.3文件名都匹配。从 MSDN docs :

    因为这个方法检查 格式和长文件名格式, 类似于“*1*.txt”的搜索模式 例如,使用 “*1*.txt”将返回 等效的8.3文件名格式将 是“longf~1.txt”。

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

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