Почему DirectoryInfo.GetFiles () соответствует файлам, которые не соответствуют маске? - PullRequest
7 голосов
/ 24 апреля 2009

В основном, у меня есть этот код:

DirectoryInfo dir = new DirectoryInfo(@"\\MYNETWORK11\ABCDEFG\ABCDEFGHIJKL\00806\");
FileInfo[] files = dir.GetFiles("200810*");

Я ожидаю, что он будет соответствовать любым файлам, начиная с 200810. Однако, он соответствует файлам с именем

20070618_00806.bak и 20070817_00806.bak (звездочек нет в имени файла, это был единственный способ, которым я мог бы добавить подчеркивание)

Я попытался сделать это с помощью команды dir из командной строки, и она также соответствует этим файлам. Почему?

Edit:

Может быть, использование C: в качестве примера не очень хорошая вещь. Каталог, который я запрашиваю, является сетевым ресурсом. \\ MYNETWORK11 \ АБВГДЕЖ \ ABCDEFGHIJKL \ 00806 \

Если проверка по короткому имени имеет какое-либо отношение к этому, не будет ли 20070817_00806.bak быть 200708 ~ 1.bak? Это тоже не соответствует

Ответы [ 4 ]

14 голосов
/ 24 апреля 2009

msdn утверждает, что

"Потому что этот метод проверяет имена файлов с именем файла 8.3 формат и формат длинного имени файла, шаблон поиска, похожий на "*1*.txt" может вернуть неожиданные имена файлов. За Например, используя шаблон поиска "*1*.txt" вернется "longfilename.txt" потому что эквивалентный 8.3 формат имени файла будет быть "longf~1.txt". "

Может ли это быть причиной?

6 голосов
/ 24 апреля 2009

Попробуйте это из командной строки:

dir /x 200810*

"/ x" заставит его показывать короткие имена файлов, а также длинные имена файлов. Это позволит вам увидеть, действительно ли короткое имя файла начинается с "200810".

4 голосов
/ 24 апреля 2009

Я не могу воспроизвести это ни из командной строки, ни из тестового приложения:

c:\Users\Jon\Test>echo > 20070618_00806.bak

c:\Users\Jon\Test>echo > 2007081700806.bak

c:\Users\Jon\Test>dir 200810*
 Volume in drive C is OS
 Volume Serial Number is B860-7E20

 Directory of c:\Users\Jon\Test

File Not Found

И приложение C #:

using System;
using System.IO;

class Test
{
    static void Main()
    {
        foreach (var file in new DirectoryInfo(".").GetFiles("200810*"))
        {
            Console.WriteLine(file);
        }
    }
}

(Это не печатает никаких результатов.)

Возможно, есть где-то настройка ОС, которая имеет значение ... какую ОС вы используете? (Я на 32-битной Vista.)

1 голос
/ 24 апреля 2009

GetFiles будет искать длинное имя файла и короткое имя файла ... оно не соответствует коротким именам файлов, не так ли?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...