MAX_PATH
От: Yuri Россия http://spbdetails.ru
Дата: 14.03.03 10:40
Оценка:
Привет всем!
В файле windef.h константа MAX_PATH определена так:

#define MAX_PATH          260


Вопрос: для всех ли файловых систем это выполняется? MAX_PATH зависит от файловой системы или от ОС?
Take it easy.
Re: MAX_PATH
От: vasketsov Россия http://ntprog.by.ru
Дата: 14.03.03 12:23
Оценка: 7 (1)
Здравствуйте, Yuri, Вы писали:

Y>Вопрос: для всех ли файловых систем это выполняется?

НЕТ.

Y>MAX_PATH зависит от файловой системы или от ОС?

И от того, и от другого, и еще от много чего.

Пример зависимости от FS — это CDFS и FAT (забыли уже?).

Пример зависимости от OS — драйвер CDFS для 9x помнится имел ограничения по этому параметры по сравнению с 2000-й (да, собственно, мало кто смотрит, что за FS на CD, CDFS или UDF, а длина на них тоже разная).

Зависимость от других факторов рассмотрим на примере подсистемы Win32 на NTFS. Константа, приведенная Вами, не имеет смысла для Native NT, ибо ограничение NTFS существенно выше чем 260. То есть, тут еще метод доступа важен, то есть, используется Win32 API или NT API или Posix.
Васкецов Сергей
http://registry.km.ru
Re: MAX_PATH
От: Valerio Россия linkedin.com/in/boronin
Дата: 14.03.03 16:43
Оценка:
Y>В файле windef.h константа MAX_PATH определена так:

Y>
Y>#define MAX_PATH          260
Y>


Y>Вопрос: для всех ли файловых систем это выполняется? MAX_PATH зависит от файловой системы или от ОС?


в 2х словах: это все пережиток DOS и плавного портирования FAT->FAT32 где есть 256 байт на длину имени файла. Некоторые ФС вроде НТФС не имеют столь жесткого ограничения, конкретно НТФС позволяет иметь UNICODE имена до 32К символов

но мой experience таков, что например FAR и даже explorer не поддерживают пути длиннее этой самой MAX_PATH! даже на NTFS!

поэтому использование этой константы в своих программах и тем более в драйверах при работе с именами файлов — это NO, даже NO-NO

В приложениях MFC используйте CString
При использовании Win32 API читайте ремарки в MSDN — есть ф-ии внутри написаны с использованием этой константы внутри и посему их использование скажем на том же NTFS даст сбой при реально длинном имени директории и\или файла.

Кстати, длинные имена вполне можно получить, используя NTFS линки на длинные имена директорий — в этом случае тоже надо быть аккуратным
... << RSDN@Home 1.0 beta 6a >>
Valery A. Boronin, RSDN Team, linkedin.com\in\boronin
R&D Mgmt & Security. AppSec & SDL. Data Protection and Systems Programming. FDE, DLP, Incident Management. Windows Filesystems and Drivers.
Re: MAX_PATH
От: adontz Грузия http://adontz.wordpress.com/
Дата: 16.03.03 12:34
Оценка:
Здравствуйте, Yuri, Вы писали:

Это ограничение на длину имени файла/каталога которое передаётся некоторым функциям WinAPI
Это легко обойти так
DRIVE:\Dir1\Dir2\Dir3 и т.д. Очень длинное имя.
Имя одного каталога не может быть больше 260 символов.
Значим мы по очереди делаем SetCurrentDirectory для всех этих имён. Относительные имена всегда катят, в любой функции.
Так можно доводить глубину и до 1000 символов. Хотя потом мало кто смодет скопировать такую папку.
A journey of a thousand miles must begin with a single step © Lau Tsu
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.