views:

125

answers:

2

I'm using the follow command to get a list of FileSystemInfo's

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

Get search pattern returns "*.exr". The list still includes files that end with ".exr2", but does not include those that end with ".exr.bak". Is this expected functionality? Should I manually check the files returned? I've noticed that this is the same result as I get from the dir command on the command line.

+1  A: 

This is caused by short names that are automatically generated for the files. In short names the extension is always the last one after '.' and has at most 3 characters. The means that short name of "example.ext2" will end with ".ext" and short name of "example.ext.bak" will end with ".bak".

Filip Navara
So this is correct behavior in Windows XP?
C. Ross
Yes, it is correct behavior. Try "dir /X" in cmd and you will see the short names.
Filip Navara
+2  A: 

From MSDN:

When using the asterisk wildcard character in a searchPattern, such as ".txt", the matching behavior when the extension is exactly three characters long is different than when the extension is more or less than three characters long. A searchPattern with a file extension of exactly three characters returns files having an extension of three or more characters, where the first three characters match the file extension specified in the searchPattern. A searchPattern with a file extension of one, two, or more than three characters returns only files having extensions of exactly that length that match the file extension specified in the searchPattern. When using the question mark wildcard character, this method returns only files that match the specified file extension. For example, given two files, "file1.txt" and "file1.txtother", in a directory, a search pattern of "file?.txt" returns just the first file, while a search pattern of "file.txt" returns both files.

Pulled from here http://msdn.microsoft.com/en-us/library/wz42302f.aspx

The reason that .exr.bak doesn't match "*.exr" is because an extension is determined to be the set of characters after the last '.' (or file extension separator character), so .exr does not match .bak.

Matt Hamsmith
Thanks, shame on me for not reading the documentation.
C. Ross