Техницкое
Вопрос комьпьютерного ламера: как устроено ограничение на размеры имени файлов в Windows?
Периодически сталкиваюсь с проблемой, когда система отказывается копировать файлы, ссылаясь на слишком длинное название. При этом она прекрасно их сохраняет с этими названиями, и так же прекрасно перемещает между директориями. А вот копировать - отказывается.
Приходится идти кривым путем, то есть вместо простого копирования файла из директории А в директорию Б - открывать файл и сохранять его заново в нужной директории.
Как такое может быть? Может быть, где-то выставлено специальное ограничение на длину имени копируемого файла, и можно это ограничение подредактировать, выставив его таким же, как ограничение на длину имени файла при сохранении и перемещении?
Периодически сталкиваюсь с проблемой, когда система отказывается копировать файлы, ссылаясь на слишком длинное название. При этом она прекрасно их сохраняет с этими названиями, и так же прекрасно перемещает между директориями. А вот копировать - отказывается.
Приходится идти кривым путем, то есть вместо простого копирования файла из директории А в директорию Б - открывать файл и сохранять его заново в нужной директории.
Как такое может быть? Может быть, где-то выставлено специальное ограничение на длину имени копируемого файла, и можно это ограничение подредактировать, выставив его таким же, как ограничение на длину имени файла при сохранении и перемещении?
no subject
no subject
http://msdn.microsoft.com/en-us/library/aa365247.aspx
no subject
no subject
В то же время, есть более новые API, которые поддерживают суммарную длину пути 32,767 символов. Если программа (например, Word) пользуется ими, то она может создать файл, который старые API не могут.
no subject
no subject
Для копирования нужно один файл открыть для чтения, второй для записи, и циклом копировать из первого во второй, пока файл не закончится. После этого оба файла надо закрыть.
Для перемещения внутри одного логического диска нужно просто сказать файловой системе откуда и куда переносится файл, и система его перенесёт, не открывая.
Иногда перенос файла требует копирования - например, при перемещении между жестким и сетевым дисками, или при копировании на другой логический диск.
no subject
no subject
Это более правдоподобно, чем старые API в самом эксплорере.
no subject
Можно представить себе организацию каталогов, которая могла бы отслеживать образование слишком длинных имён и при перемещении. Но это непросто и небесплатно в смысле производительности.
(Если бы речь шла о Linux VFS layer, была бы не гипотеза, а инфа 100%. В случае Windows, пожалуй, всё-таки гипотеза, но я очень удивлюсь, если она не соответствует действительности).
no subject
no subject
no subject
no subject
no subject
no subject
Есть подозрение, что что-то у вас не так просто с объектами копирования.
Например, не находится ли одна из папок, куда или откуда вы копируете, на сетевом диске?
no subject
no subject
Offset Size Description
0x40 1 Filename length in characters (L)
0x41 1 Filename namespace
0x42 2L File name in Unicode (not null terminated)
no subject
no subject
no subject
no subject
Если у Вас не "семерка", а более поздняя версия Виндовс, то может быть это - просто глюки неотлаженной ОС. Попробуйте обратиться в техподдержку.
no subject
no subject
no subject
И почему операция перемещения осуществляется (причем всегда осуществляется), а операция копирования - нет?
no subject
Вы как копируете, кстати -- перетаскиваете между окнами или же командами скопировать/вставить?
no subject
А файлы чаще всего pdf.
Видимо, вы правы - придется смириться с несовершенством мира :(((
no subject
точно можно сказать одно - имя не может быть длиннее примерно 32 000 символов, это ограничение внутренних структур системы
no subject
no subject
Да, я говорю про виндоуз эксплорер. Перемещение в нем можно делать как чисто мышью (только с зажатой ЛЕВОЙ кнопкой - при зажатой ПРАВОЙ кнопке выскакивает меню, спрашивающее, что именно я хочу делать, перемещать или копировать), так и командами Ctrl-X/Ctrl-V
no subject
no subject
Но я, почитавши умных людей, решил поиграть и посмотреть, как оно устроено - и экспериментально обнаружил, что успешность копирования таких файлов может зависеть от общей длины его имени (в смысле path, с именами всех вложенных директорий). То есть файл может копироваться в директорию первого уровня от корневой, но не копироваться в директорию, скажем, третьего или пятого уровня.
Но перемещение срабатывает всегда.
no subject
total commander на сверхдлинное имя предупредил и скопировал.
в общем, я бы всячески его для юзерских файловых операций рекомендовал. там можно фильтры настраивать, в разные цвета раскрашивать файлы и папки, держать открытыми 10+ табов одновременно, просматривать содержимое файла без открытия. во всем сразу не разберетесь, конечно, но оно стоит для библиотек и более того, способствует правильной ее организации.
и еще - вы наверняка адоб акробатом пдфы открываете, по пять минут? есть такой sumatrapdf для винды броузер, он очень быстрый.
no subject
А вот акробат pdf открывает и обрабатывает со свистом, никаких проблем.
no subject