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
, Я знаю обходной путь (проверив значение "Имя" в найденном файле, которое даст мне полное имя, а затем проверит полное имя). Однако это безумие.
У меня есть несколько вопросов здесь:
Почему короткие имена были отформатированы неправильно?
Есть ли способ сказать
FindFirst()
/FindNext()
искать только длинные имена файлов? Если нет, есть ли у кого-нибудь альтернативная функция, которую можно использовать?Существует команда DOS для полного отключения коротких имен. Есть ли опасности при этом? Кроме того, если я отключу эту опцию на нашем сетевом диске, будет ли этого достаточно? Все файловые операции выполняются с компьютеров конечного пользователя (нужно ли отключать короткие имена на отдельных компьютерах?