FindFirst / FindNext найти неправильные файлы найдены

Я пишу код в Borland C++Builder 6. В некоторых моих приложениях я использую следующую функцию для поиска файлов в нашей сети:

String sRootDir="N:\\";
String sClmNbr="748000";
TSearchRec fnd1;

if (FindFirst(sRootDir+sClmNbr+"*.PDF",faAnyFile,fnd1)==0)
{
    lbClmCpy->Lines->Add(fnd1.Name);    
    while (FindNext(fnd1)==0)
        {lbClmCpy->Lines->Add(fnd1.Name);}
    FindClose(fnd1);    
}

Это разбавленная версия функции, но вы можете видеть, чего я пытаюсь достичь. Я пытался найти любой файл на N: с маской 748000*.*,

Однако функция возвращает файлы, которые не соответствуют маске. После некоторых копаний я обнаружил, что это связано с короткими именами файлов 8.3. По какой-то причине короткие имена файлов совершенно неверны. Например, 748123_20161110.pdf должен выглядеть примерно так 748123~1.pdfвместо этого он показывает 748AE4~1.PDF, Я знаю обходной путь (проверив значение "Имя" в найденном файле, которое даст мне полное имя, а затем проверит полное имя). Однако это безумие.

У меня есть несколько вопросов здесь:

  1. Почему короткие имена были отформатированы неправильно?

  2. Есть ли способ сказать FindFirst()/FindNext() искать только длинные имена файлов? Если нет, есть ли у кого-нибудь альтернативная функция, которую можно использовать?

  3. Существует команда DOS для полного отключения коротких имен. Есть ли опасности при этом? Кроме того, если я отключу эту опцию на нашем сетевом диске, будет ли этого достаточно? Все файловые операции выполняются с компьютеров конечного пользователя (нужно ли отключать короткие имена на отдельных компьютерах?

0 ответов

Другие вопросы по тегам