Использование длинных путей Pascal
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
При использовании chdir('путь'), если длина пути превышает порядка 68 символов, выдается ошибка path not found.
С какой стороны это можно обойти?
Спасибо за внимание.
С какой стороны это можно обойти?
Спасибо за внимание.
Да, кажись чё-то не то спросил...
Может хоть идеи какие есть, буду признателен.
Не хочется на другой язык прогу перекладывать из-за этого.
Может хоть идеи какие есть, буду признателен.
Не хочется на другой язык прогу перекладывать из-за этого.
Хочу заметить, что ChDir использует DOS имена, т.е. формата 8:3. Такая ошибка, типа "путь не найден" возникает при использовании длинных имен файлов или каталогов. Есть ли в пути нечто подобное?
It's a long way to the top if you wanna rock'n'roll
Да нет, тут дело не в этом.
Pascal просто отказывается видеть путь длиней 68 символов.
Попробуйте например найти у себя на компе самый дальний угол и засунуть туда файл, с расширением *.pas. А потом запустить его, если в обычных ситуациях он запускается, то из дальних папок, общая длина пути которых превышает магическое число 68 это не получится.
Да кстати, пользую Pascal 7.0 под WinXP.
Pascal просто отказывается видеть путь длиней 68 символов.
Попробуйте например найти у себя на компе самый дальний угол и засунуть туда файл, с расширением *.pas. А потом запустить его, если в обычных ситуациях он запускается, то из дальних папок, общая длина пути которых превышает магическое число 68 это не получится.
Да кстати, пользую Pascal 7.0 под WinXP.
- Колядин Максим
- Сообщения: 297
- Зарегистрирован: 16 ноя 2006, 19:09
- Откуда: Seattle, WA
- Контактная информация:
Могу сказать, что данной ошибки избежать невозможно. У меня когда-то тоже проблемка была - с расширением файла в ДОС. Как выяснилось, здесь много ограничений с длинной имени файла, длинной расширения, и длинной пути. Но всё же, в дос существуют специальные имена - если имя файла/каталога превышает 8 символов, то имя сокращается да 6-ти, далее "~1". Например папка Pragram files в ДОС'e будет как "PROGRA~1", папка "QWERTYUIO" - "QWERTY~1" и т.д.
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
C cокращениями все правильно (Progra~1 и т. д.), только когда каталогов штук 8 наберется, и общая длина пути станет больше 68 все опять же упирается в стенку.
Ладно похоже одно из непреодолимых ограничений на длину пути. Пожалуй с этим вопросом, если только к разработчикам лезть, чтоб поправили в будущем.
Пошел посвежей версию Pascalя поищу. Пора вылазить из DOSа.
Можно закрывать ветку.
Ладно похоже одно из непреодолимых ограничений на длину пути. Пожалуй с этим вопросом, если только к разработчикам лезть, чтоб поправили в будущем.
Пошел посвежей версию Pascalя поищу. Пора вылазить из DOSа.
Можно закрывать ветку.
А вот и зря, хотел предложить режение через ассемблер." писал(а):Можно закрывать ветку.
It's a long way to the top if you wanna rock'n'roll
А вот это можно, с удовольствием поглядел бы" писал(а):А вот и зря, хотел предложить режение через ассемблер.
Код: Выделить всё
procedure ChDir(path : String);
begin
path := path + #0;
asm
push ds
push ss
pop ds
mov ah, 3bh
lea dx, path + 1
int 21h
pop ds
end;end;
Код: Выделить всё
ChDir('d:\other\pascal\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde\abcde');
Self test:
- запускаем интерпретатор cmd (WinXP,NT,2K) или command (Win95,98)
- запускаем через него среду TP
- меняем путь на "дальний угол", запустив программу
- выходим из среды, при этом TP ругнется, что не может сохранить настройки (путь ведь поменяли)
- в строке приглашения интерпретатора видим, что сидим в той папке, где надо.
It's a long way to the top if you wanna rock'n'roll
Спасибо большое. Ща попробуем.