powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / API GetShortPathName не всегда корректно работает
4 сообщений из 4, страница 1 из 1
API GetShortPathName не всегда корректно работает
    #33979601
foll-fill
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет всем.

Писал программу, где была необходима разархиваиция при помощи WinRAR. Написал, протестировал её на своей машине - все работает. Понес ставить клиентам и на 1 машине из 5 программа работать отказалась (модуль, отвечающий за работу с архивами). Локализовал проблему и оказалось, что во всем виновата АПИшная функция GetShortPathName, которая как раз на этой машине не хочет отрабатывать и возвращает то же длинное имя архива с русскими буквами, что ей и давалось, и соответственно winrar ругается, что архив не найден.
Проблемная машина: Win XP SP2, диск NTFS
Взял специально написал небольшую програмку для конвертации длинного имени в короткое (файл проекта присоединил).

Основной текст такой:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
m.lcName = ALLTRIM(thisform.edit1.Value)  
    
  Declare Integer GetShortPathName In kernel32 String lpszLongPath, String @lpszShortPath, Integer cchBuffer  
  Local m.lcBuffer, m.lnResult  
  m.lcBuffer=SPACE( 250 )  &&Replicate(Chr( 0 ), 256 )  
  m.lnResult=GetShortPathName(m.lcName,@lcBuffer,Len(m.lcBuffer))  
  Clear Dlls "GetShortPathName"  
    
  thisform.edit2.value = Left(m.lcBuffer,m.lnResult)


И снова у меня работает, а на проблемной машине возваращает такую-же строку, а при повторном запуске (нажатии на кнопку)
выдает ошибку что библиотека kernel32.dll не найдена в папке проекта. Посему взял и заменил kernel32 на Win32API во второй строке, после чего ошибки такой не выдаёт больше, однако имя остаётся прежним, как быть подскажите?
...
Рейтинг: 0 / 0
API GetShortPathName не всегда корректно работает
    #33979666
Проходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А на чем основана такая любовь к коротким именам? Небось сразу будет сказано, что рар не работает с длинными именами? И это утверждение уже проверено?
...
Рейтинг: 0 / 0
API GetShortPathName не всегда корректно работает
    #33979761
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Почитай про SYS(2014) - помогает уложиться в длину командной строки
2. может быть проблема из-за пробелах в путях
так не сработает: rar a docs c:\Мои документы\*.*
а так сработает: rar a docs "c:\Мои документы\*.*"
т.е. все параметры которые теоретически могут содержать пробелы надо в двойные кавычки

у rar.exe (который с WinRAR идет) проблем с длинными именами нет
...
Рейтинг: 0 / 0
API GetShortPathName не всегда корректно работает
    #33982878
dmitryx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно, если необходима только разархивация, то можно воспользоваться функциями из unrar.dll. У меня прекрасно работает и с длинными путями и с русскими названиями. Да и winrar не нужно с собой таскать, и лицензионная чистота соблюдается ;)
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / API GetShortPathName не всегда корректно работает
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]