DirectoryInfo.GetFiles (searchPattern) ведет себя странно и возвращает случайные файлы, которые не соответствуют searchPattern - PullRequest
0 голосов
/ 19 октября 2010

У меня есть какой-то старый устаревший код, который я поддерживаю (прошу прощения за наименование, это было написано не программистом, и приложение не настолько важно, чтобы его можно было переписать):

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 *. *") И т. Д.

Кажется, что файлы, которые он извлекает, не имеют ничего общего, но эти 5 файлов извлекаются каждый раз для шаблона поиска "1370 *. *"

Что, черт возьми, здесь происходит?

1 Ответ

1 голос
/ 19 октября 2010

Поскольку это длинные имена файлов, возможно, вы столкнулись с проблемой в этом 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;
  }
}
...