2009-09-02 9 views
0

J'utilise la commande de suivi pour obtenir une liste desDirectory.GetFileSystemInfos (chaîne) renvoie les fichiers non-correspondant

IList<FileSystemInfo> requestFiles = 
       new List<FileSystemInfo>(
        _RequestDirectory.GetFileSystemInfos(GetSearchPatern())); 

de modèle de recherche Get de FileSystemInfo retourne "* .exr". La liste inclut toujours les fichiers qui se terminent par ".exr2", mais n'inclut pas ceux qui se terminent par ".exr.bak". Est-ce que cette fonctionnalité est attendue? Devrais-je vérifier manuellement les fichiers retournés? J'ai remarqué que c'est le même résultat que je reçois de la commande dir sur la ligne de commande.

Répondre

2

De MSDN:

Lorsque vous utilisez le caractère générique astérisque dans un searchPattern, comme « txt », le comportement correspondant lorsque l'extension est exactement trois caractères est différent que lorsque l'extension est plus ou moins que trois caractères de long. Un searchPattern avec une extension de fichier de trois caractères exactement renvoie les fichiers ayant une extension de trois caractères ou plus, où les trois premiers caractères correspondent à l'extension de fichier spécifiée dans le searchPattern. Un searchPattern avec une extension de un, deux ou plus de trois caractères renvoie uniquement les fichiers dont les extensions ont exactement la même longueur que l'extension de fichier spécifiée dans searchPattern. Lorsque vous utilisez le caractère générique de point d'interrogation, cette méthode renvoie uniquement les fichiers qui correspondent à l'extension de fichier spécifiée. Par exemple, étant donné deux fichiers, "file1.txt" et "file1.txtother", dans un répertoire, un motif de recherche de "fichier? .txt" renvoie uniquement le premier fichier, tandis qu'un modèle de recherche de "fichier .txt" renvoie les deux fichiers.

Pulled d'ici http://msdn.microsoft.com/en-us/library/wz42302f.aspx

La raison pour laquelle .exr.bak ne correspond pas à « * .exr » est parce qu'une extension est déterminée à être le jeu de caractères après le dernier. » (ou caractère séparateur d'extension de fichier), donc .exr ne correspond pas à .bak.

+0

Merci, honte à moi de ne pas avoir lu la documentation. –

1

Ceci est dû à short names qui sont générés automatiquement pour les fichiers. Dans les noms courts, l'extension est toujours la dernière après '.' et a au plus 3 caractères. Le nom court de "example.ext2" se terminera par ".ext" et le nom court de "example.ext.bak" se terminera par ".bak".

+0

Ce comportement est-il correct dans Windows XP? –

+0

Oui, c'est un comportement correct. Essayez "dir/X" dans cmd et vous verrez les noms courts. –

Questions connexes