【问题标题】:DirectoryInfo.GetFiles(searchPattern) is behaving oddly, and returning random files that DON'T match the searchPatternDirectoryInfo.GetFiles(searchPattern) 行为异常,并返回与 searchPattern 不匹配的随机文件
【发布时间】:2010-10-19 18:37:35
【问题描述】:

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

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

这到底是怎么回事?

【问题讨论】:

  • 我会在别处寻找其他被提取的文件 - 可能是您共享的 sn-p 之前的调用。

标签: .net vb.net directoryinfo


【解决方案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;
  }
}

【讨论】:

  • 我查过了,我不认为这是问题。
  • @Yuriy - 令人费解 - 返回的 FileInfo 误报中是否还有其他可能导致此异常的内容?您是否尝试过仅使用“1370 *”作为模式?您能否在针对该目录运行的最小 C# 应用程序中重现这一点?
  • @Steve,实际上我无法重现他的错误,而且我认为他正在执行一些他认为他不是的事情。但是长文件名应该不是问题,因为他在 1370 之前没有 *。
  • 你们都在运行相同的 .Net fwk 版本吗?听起来你有一个很好的理由从现在开始将此视为应用程序中的错误。
  • 我也不认为是这样,但谁知道呢。请他在命令提示符下使用 dir /x 进行验证。
猜你喜欢
  • 2012-06-04
  • 2017-07-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多