2010-10-19 3 views
0

J'ai un vieux code hérité que je suis en train de maintenir (veuillez pardonner le nom, ceci a été écrit par un non programmeur et l'application n'est pas assez important pour être réécrite):DirectoryInfo.GetFiles (searchPattern) se comporte bizarrement, et retourne des fichiers aléatoires qui ne correspondent pas au searchPattern

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 

les fichiers retournés sont:
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

Comme vous pouvez voir les fichiers retournés ne correspondent pas tous le motif de recherche que je passe à GetFiles. Ce code fonctionne pour tous les autres modèles de recherche comme ("1369 *. *") Etc.

Les fichiers qu'il tire semblent n'avoir rien en commun, mais ces 5 fichiers sont relevés à chaque fois pour le motif de recherche " 1370 *. * "

Que diable pourrait-il se passer ici?

+0

Je chercherais ailleurs les autres fichiers qui sont extraits - probablement un appel avant l'extrait que vous avez partagé. – Oded

Répondre

1

Étant donné que ce sont des noms de fichiers longs, vous risquez peut-être de rencontrer une erreur dans cette API où elle correspond à la fois au nom de fichier complet et au nom de fichier 8.3. De l'MSDN docs:

Parce que cette méthode vérifie contre noms de fichiers à la fois le nom format de fichier 8.3 et le format long nom de fichier, un modèle de recherche similaire à « * 1 * txt » peut revenir inattendu noms de fichiers. Pour par exemple, l'utilisation d'un modèle de recherche de "* 1 * .txt" renverra "longfilename.txt" car le format de nom de fichier équivalent à 8.3 serait être "longf ~ 1.txt".

Vous pouvez filtrer les résultats après coup en les vérifiant et en ignorant les faux positifs. Désolé, il s'agit du code C#.

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

J'ai vérifié, je ne pense pas que ce soit le problème. –

+0

@Yuriy - énigme - y a-t-il autre chose dans les faux positifs FileInfo retournés qui pourrait causer cette anomalie? Avez-vous essayé d'utiliser "1370 *" comme motif? Pouvez-vous reproduire cela dans une petite application C# exécutant contre ce répertoire? –

+0

@Steve, en fait je ne peux pas reproduire son bug, et je pense qu'il exécute quelque chose qu'il ne pense pas qu'il est. Mais le nom de fichier long ne devrait pas être un problème car il n'a pas de \ * avant le 1370. –

Questions connexes