Работа с ненормально длинными именами и путями файлов | |
---|---|
Sergievsky Автор Сообщений: 133 Дата регистрации: 24.10.2000 |
Пишу программку с навигацией а-ля Total Commander.
Возникла суровая необходимость блуждать по папкам (не я их придумал) с очень длинными именами и с такими же именами файлов. Укоротить я их не имею права. Проводник, Total Commander, WinRar предупреждают что криво будут работать некоторые программы и лучше бы все укоротить. Полные имена файлов с путями попадаются более 254 символов. В частности Проводник часть путей просто преобразует в имя DOS 8+3 чтобы зайти по требуемому адресу. Выхожу из положения применяя ADIR(ArrayName [, cFileSkeleton [, cAttribute [, nFlag]]]), где nFlag=2. Имена файлов представляются в нотации DOS 8+3 (как короткие имена) Все чудесно работает, причем мне не нужно "физически" ходить по каталогам (CD,CHDIR,SET DEFAULT и.т.п.). Единственно, на экране мне нужно показывать оригинальные длинные имена вместо коротких. Как мне это сделать без вторичного вызова ADIR c параметром nFlag=1 ? Желательно бы обойтись без тяжелой артиллерии в лице Windows API, наверное проще вызвать ADIR второй раз уже не по "*.*", а по найденному короткому имени+расширению. И еще. Я не уверен, что ADIR с параметром nFlag=2 и параметром nFlag=1 будут одинаково сканировать каталог, то есть порядок файлов в обоих случаях будет идентичен, поэтому и упомянул про ADIR для каждого найденного файла. Исправлено 1 раз(а). Последнее : Sergievsky, 19.01.18 08:54 |
Re: Работа с ненормально длинными именами и путями файлов | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
SYS(2000, ...) тоже имя возвращает
|
Re: Работа с ненормально длинными именами и путями файлов | |
---|---|
Sergievsky Автор Сообщений: 133 Дата регистрации: 24.10.2000 |
К сожалению, с именами папок эта штука не работает. Исправлено 1 раз(а). Последнее : Sergievsky, 19.01.18 09:22 |
Re: Работа с ненормально длинными именами и путями файлов | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
Ну, если не ADIR, то API GetLongPathName, заодно правильный регистр на выходе...
|
Re: Работа с ненормально длинными именами и путями файлов | |
---|---|
akvvohinc Сообщений: 4224 Откуда: Москва Дата регистрации: 11.11.2008 |
Будет сканировать одинаково, если файловая структура не изменится. Но если вы хотите убедиться в этом, то что мешает проверить? Думаю, если вы просканируете все свои диски и порядок файлов ни разу не будет отличаться, то этого будет достаточно. Ведь иначе как вообще можно быть в чем-то уверенным? Может, у Фокса и дважды два не всегда четыре. Но пока исключения не обнаружены, считаем, что всегда. |
Re: Работа с ненормально длинными именами и путями файлов | |
---|---|
of63 Сообщений: 25256 Откуда: Н.Новгород Дата регистрации: 13.02.2008 |
...а зачем получать ДВА массива (с короткими и длинными именами). Можно получить массив коротких имен, а потом тем же ADIR преобразовать КАЖДОЕ короткое имя в длинное (заменяем SYS(2000, имя) на ADIR(имя)):
=ADIR(A, маска, "", 2) && все имена в коротком виде =ADIR(B, ADDBS(путь)+A[1,1]) ?B[1,1] && длинное имя 1 =ADIR(B, ADDBS(путь)+A[2,1]) ?B[1,1] && длинное имя 2 ... |
Re: Работа с ненормально длинными именами и путями файлов | |
---|---|
Igor Korolyov Сообщений: 34580 Дата регистрации: 28.05.2002 |
Так автор вопроса и делает. Но это не совсем оптимально. P.S. У меня, к примеру, на томах отключена поддержка имён 8.3 - т.е. что ADIR(,1) что ADIR(,2) возвращают одно и то же "длинное" имя - и да, фокс не в состоянии зайти в папки с "длинными" путями. Впрочем, виндовый проводник тоже ------------------ WBR, Igor |
© 2000-2024 Fox Club  |