Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Проблема сверхдлинных имён файлов
Goto page Previous  1, 2
 
Post new topic   Reply to topic    Total Commander Forum Index -> Общие вопросы printer-friendly view
View previous topic :: View next topic  
Author Message
Alextp



Joined: 06 Feb 2005
Posts: 4957

Post (Separately) Posted: Mon Aug 21, 2006 10:11    Post subject: Reply with quote

2Вахмурка
Quote:
А разве там не все числа есть степени двойки? На низком уровне ведь это должно быть представлено целым числом бит. Если 260, значит, 8 бит чуточку не хватает. То есть используется 9, так?

Нет, наверное не так, используется 16 или даже 32 бит. Скорее всего. Т.к. процессор все равно работает с 32 бит словами, экономить биты резона нет. Это в памяти. А на диске - может быть и 9, кто знает как устроена FAT/NTFS.

Quote:
Что касается С++, то там константа MAX_PATH

Нет, я про Win API
Back to top
View user's profile Send private message
Ник



Joined: 15 Dec 2004
Posts: 1256
Location: Москва

Post (Separately) Posted: Mon Aug 21, 2006 10:23    Post subject: Reply with quote

Короче, умники:

При экспорте из Бата:

212 - длина имени файла при наличии точки и 4 знаков в расширении - предел.
213, 214 - что-то, где-то работает иногда.
215 - стоп-машина Sad

Если взять файл с именем длиной 212 и руками в ТК добавлять символы (хоть цифры, хоть русские буквы) - всё работает до 240 как минимум.

Теория суха мой друг, а древо жизни (практики) вечно зеленеет... Smile
_________________
Xubuntu 20.10
Back to top
View user's profile Send private message
Parcan



Joined: 15 Dec 2004
Posts: 398
Location: Russian

Post (Separately) Posted: Mon Aug 21, 2006 18:07    Post subject: Reply with quote

возможно еще надо учитывать длину пути до этого файла
а так когда я разбирался как храняться имена в tar архивах, то если мне не изменяет память я пытался создавал файлы в корне диска с именами менее и более 512 (0x200) символов и без расширения, что бы посмотреть как они там в структуре сохраняться, вот только не помню какая длина создаваемого фала в тотале оказалась максимальной, но все они были текстовые и никаких проблем с ними не возникало.

блин проверил максимум 255 символов без расширения, но мне кажеться что в тс 6.54 или 6.54а мне удавалось создать больший файл
Back to top
View user's profile Send private message
Ник



Joined: 15 Dec 2004
Posts: 1256
Location: Москва

Post (Separately) Posted: Mon Aug 21, 2006 19:29    Post subject: Reply with quote

Насколько я помню, существует ограничение на полный путь + имя + расширение...
_________________
Xubuntu 20.10
Back to top
View user's profile Send private message
Alextp



Joined: 06 Feb 2005
Posts: 4957

Post (Separately) Posted: Mon Aug 21, 2006 19:34    Post subject: Reply with quote

2Ник
Именно так.
_________________
UniViewer - CudaText - LogViewer
Back to top
View user's profile Send private message
Вахмурка



Joined: 27 Dec 2004
Posts: 2584
Location: Большая деревня Москва

Post (Separately) Posted: Thu Aug 24, 2006 10:34    Post subject: Reply with quote

2Alextp
Дружище, ты прав, MAX_PATH действительно 260 (см. npptypes.h или WinDef.h). В ужасе просмотрел свои коды - да нет, ни на что не повлияло. Говорила мне мама: сомневайся даже в очевидном!

К теме. Вот какой скрипт PowerPro я сляпал:
Code:

local Name = "abcdefghijklmnopqrstuvwxyz-123"
local Long, i

for(i = 0; i < 8; i++)
   Long = Long ++ Name
endfor

Long = "f:\" ++ Long ++ "01234567890.txt"

local Hand = file.open(Long, "w")
file.writeline(Hand, Long)
file.writeline(Hand, length(Long))
file.writeline(Hand, length(file.nametype(Long)))
file.close(Hand)

Нетрудно видеть, что полное имя файла содержит 255 символов. При попытке добавить хотя бы один символ к имени PowerPro отказывается его создавать (отрицательный дескриптор). Разумеется, при любой меньшей длине проблем никаких.
Создавал я его на Zip-дискете, чтобы в случае "неудаляемости" файла тупо ее отформатировать.
Что оказалось:
1) На Зипе все замечательно: создается, просматривается, загружается на редактирование;
2) При копировании на жесткий диск (что FAT16, что NTFS) имя файла (без пути) усекается до 245 смиволов, считая с начала. То есть пропадает расширение и еще 6 символов (последние символы имени "1234";
3) Проводник не имеет никаких проблем с таким файлом. Имя высвечивается полностью;
4) В ТС файл открывается Листером и текстовым редактором, а вот удаление... вызывает ошибку write protection! Для удаления надо выключить режим длинных имен;
5) Попытка переименовать такой файл в ТС проходит без проблем, если общее число символов не возрастает. Совершенно корректно проходит переименование удалением 4-х символов и вставкой ".txt" - файл приобретает текстовую иконку и все соответствующие свойства.
6) Потом я осмелел и создал такой файл на винте (FAT16). Вышло:
путь: 14 символов;
имя: 241 символ;
".txt": 4 символа.
Итого: 259 символов.
7) Для NTFS то же самое, путь на символ длиннее, имя на символ короче;
8 ) Наконец, дискета. Получилось максимальная длина полного имени 258 символов (3+251+4).
9) И, наконец, флешка: то же, что и дискета. При копировании с флешки на винч имя усекается до 244 символов (а не 245, как при копировании с зипа).

На этом носители у меня кончились.
Выводы: максимальная длина "только имя (без пути и расширения)/полное имя" составляет в символах:
Zip: 248/255
Винч (любая ФС): 241/259
Дискета и флешка: 251/258

При копировании тоже числа разные.
Забавно, на следующий день результаты были несколько иные (на 2-3 символа).

Итак, разброс незначителен, но он имеет место. Предлагаю знатокам файловых систем, таблиц размещения и прочих вопросов высказать свои соображения. Например, за рамками исследования остался вопрос: какова максимальная длина имени файла, который ТС может удалить без переключения в режим 8.3?
_________________
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Back to top
View user's profile Send private message
Ник



Joined: 15 Dec 2004
Posts: 1256
Location: Москва

Post (Separately) Posted: Thu Aug 24, 2006 10:58    Post subject: Reply with quote

Quote:
какова максимальная длина имени файла, который ТС может удалить без переключения в режим 8.3


255 (или 254) - но в "имя" включается полный путь и имя диска, всё это с разделителями, двоеточиями и слешами...
_________________
Xubuntu 20.10
Back to top
View user's profile Send private message
Вахмурка



Joined: 27 Dec 2004
Posts: 2584
Location: Большая деревня Москва

Post (Separately) Posted: Thu Aug 24, 2006 11:08    Post subject: Reply with quote

Мои исследования выдают немного иные результаты...
_________________
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Back to top
View user's profile Send private message
Ник



Joined: 15 Dec 2004
Posts: 1256
Location: Москва

Post (Separately) Posted: Thu Aug 24, 2006 11:37    Post subject: Reply with quote

Извините, но Ваши исследования некорректны (ИМХО) - в системах ФАТ16 и ФАТ32 в таблице хранится "полный путь (с именем диска) и имя файла" - поэтому нужно мерять именно их.

Что касается флешки - то там другая файловая система (типа "псевдоФАТ") и что там и к чему - фиг его знает.
НА обычных дискетах - ФАТ12.
На "ЗИП"-е (?это Вы имеете ввиду ЗИП-драйв или что?) - третья (не знаю какая)...

В NTFS вообще мастер-тейбл главная - имена хранятся отдельно (при этом, как мне помнится, таблица имён аналогична ФАТ32 - но операции с файлами производятся в первую очередь с помощью мастер-таблицы)...
_________________
Xubuntu 20.10
Back to top
View user's profile Send private message
Вахмурка



Joined: 27 Dec 2004
Posts: 2584
Location: Большая деревня Москва

Post (Separately) Posted: Thu Aug 24, 2006 12:26    Post subject: Reply with quote

Ник wrote:
Извините, но Ваши исследования некорректны (ИМХО) - в системах ФАТ16 и ФАТ32 в таблице хранится "полный путь (с именем диска) и имя файла" - поэтому нужно мерять именно их.
Что значит "некорректны"? Чем именно? Я просто провел эксперимент, и предоставил более компетентным лицам делать выводы. Если была ошибка в самом эксперименте, просьба указать конкретнее, где именно.
Quote:
Что касается флешки - то там другая файловая система (типа "псевдоФАТ") и что там и к чему - фиг его знает.
НА обычных дискетах - ФАТ12.
На "ЗИП"-е (?это Вы имеете ввиду ЗИП-драйв или что?) - третья (не знаю какая)...
Да, Zip от Iomega (на 100 Мб). Анахронизм, понимаю, но работает, зараза...
Quote:
В NTFS вообще мастер-тейбл главная - имена хранятся отдельно (при этом, как мне помнится, таблица имён аналогична ФАТ32 - но операции с файлами производятся в первую очередь с помощью мастер-таблицы)...
Вот именно этого, дорогие теоретики, я от вас и ждал Smile
_________________
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Back to top
View user's profile Send private message
Ник



Joined: 15 Dec 2004
Posts: 1256
Location: Москва

Post (Separately) Posted: Thu Aug 24, 2006 14:03    Post subject: Reply with quote

2Вахмурка:
Я имел ввиду, что в полное имя нужно включать и имя диска и двоеточие - из Вашего поста я не понял - так Вы делали или имя диска с двоеточием пропускали при подсчёте?
_________________
Xubuntu 20.10
Back to top
View user's profile Send private message
Вахмурка



Joined: 27 Dec 2004
Posts: 2584
Location: Большая деревня Москва

Post (Separately) Posted: Thu Aug 24, 2006 14:53    Post subject: Reply with quote

Под "полным именем" понимается:
путь + имя + расширение.
Например, минимальная длина пути составляет 3 символа (буква + двоеточие + \), имени - 1 символ, расширения - 0 (его может не быть). Например, именно эти слагаемые я имел в виду здесь:
Quote:
Получилось максимальная длина полного имени 258 символов (3+251+4)

_________________
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Back to top
View user's profile Send private message
Ник



Joined: 15 Dec 2004
Posts: 1256
Location: Москва

Post (Separately) Posted: Thu Aug 24, 2006 14:57    Post subject: Reply with quote

А точку между именем и расширением Вы считали? Она тоже значима!

А если имени нет - а сразу точка и расширение?

Разница между именем и расширением не так жестка, как хотелось бы Wink
_________________
Xubuntu 20.10
Back to top
View user's profile Send private message
Вахмурка



Joined: 27 Dec 2004
Posts: 2584
Location: Большая деревня Москва

Post (Separately) Posted: Thu Aug 24, 2006 15:11    Post subject: Reply with quote

Quote:
А точку между именем и расширением Вы считали? Она тоже значима!

Кто-то из нас очень невнимателен Smile. Последние "+4" - это ".txt". Мне казалось, я все понятно написал.
Quote:
А если имени нет - а сразу точка и расширение?

В свое время подобные эксперименты привели к созданию неудаляемого файла. Больше не хочется. Уж сколько раз я эти операционки таким образом ронял...
_________________
Сайт PowerPro+Total Commander
Скрипты PowerPro для Total Commander
* * *
«Не усматривайте злого умысла в том, что вполне объяснимо глупостью» (Р. Хэнлон)
Back to top
View user's profile Send private message
Zoooom



Joined: 28 Dec 2004
Posts: 45

Post (Separately) Posted: Sun Aug 27, 2006 23:29    Post subject: Reply with quote

был у меня глюк когда создались волженные каталоги максималной глубины: D:\install\123\123\123.....\123\123\123\a.txt
с файлом ничего нельзя сделать но если переименовать пару промежуточных папок "123"->"1"(т е сократить путь) то все операции прокатывают на ура(юзал тока тотал, удалять прововал всем подряд)
Back to top
View user's profile Send private message
Display posts from previous:   
Post new topic   Reply to topic    Total Commander Forum Index -> Общие вопросы All times are GMT + 4 Hours
Goto page Previous  1, 2
Page 2 of 2

 
Jump to:  
You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot vote in polls in this forum


Powered by phpBB © 2001, 2005 phpBB Group