我有一些旧的遗留代码我正在维护(请原谅命名,这是由非程序员编写的,应用程序不够重要,不能重写):
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个文件
这可能会发生什么?
答案 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;
}
}