Техподдержка
 
Форумчанин
Регистрация: 25.01.2008
Адрес: Санкт-Петербург
Сообщения: 1,314
Репутация:  298 
|
Возможно, это как раз следствие отмены запрета на недопустимые символы. Я уже писал о возможных проблемах, как раз именно таких.
Cкрытый текст -
Где-то в названии могут быть недопустимые символы. Файловая система работает таким образом, что независимо от регистра символов в названии файла, имя которого мы видим в таком виде, как создали, реально в файловой системе имена приводятся к одному регистру (обычно верхнему), а также дополнительно создается короткое имя (что в данном случае для нас несущественно - короткое имя это резерв, чтобы можно было работать с файлом в консольном режиме). Преобразование регистра ведется по таблице перекодирования, которая зависит от базового языка локализации Windows (не путайте с поддержкой национальных языков - она действует только для отображения национальных символов, например, кириллицы, в текстах, программах и т.п., а не в файловой системе; в файловой системе кодовая таблица всегда для того языка, на котором написан сам Windows).
Это справедливо даже для имен в Unicode (UTF-8, между прочим, частный случай Unicode, где английские символы передаются в 8-битовой кодировке ANSI, а науиональные - в 16-битовой).
Когда вы вызываете файл (независимо - в проводнике, командной строке или файловом менеджере) вы видите его имя в том виде, как создали, но система каждый раз преобразует это имя, как сказано выше, и ищет его уже по преобразованному имени.
Кстати, поэтому в Windows имена файлам можно задавать любыми символами, например, TEXT, text, Text, TeXt, но для файловой системы это одно и то же имя. Попробуйте, например, в блокноте написать какой-нибудь текст и сохранить его с именем TEXT, а затем еще раз сохранить его под именем text в той же папке - файловая система сразу сообщит вам, что такой файл существует и запросит перезапись, хотя внешне имена разные.
Обычно это проблем не вызывает, если символы в полном имени допустиммы - они корректно преобразуются во "внутреннее" имя (которое средствами системы мы и не видим, истинное имя файла можно увидеть только программами, работающими непосредственно с секторами диска).
При копировании файлов сохраняется как внешнее имя (которое мы видим), так и внутреннее (имя файловой системы), причем внутрееннее имя просто копируется, а не создается заново. Модифицируется при копировании только короткое имя 8.3, причем только если в папке назначения уже есть файл с таким коротким именем.
Если файл был создан на одном компьютере даже с использованием допустимых символов национальных алфавитов данной локализации, а скопирован на другой компьютер, в локализации системы которого некоторые из символов недопустимы, то внешнее имя может даже быть читаемым, без букозяк (поскольку для него все-таки используется языковая поддержка), а вот во внутреннем имени могут оказаться недопустимые символы.
Что имеем в результате? Кликаем на таком имени (которое вроде бы выглядит правильно). Система преобразовывает это имя во внутреннее и начинает искать файл с полученным именем. Но ведь система преобразовывала имя по СВОЕЙ таблице преобразования символов, а сохраненное имя (оно ведь при создании было преобразовано другой таблицей преобразования) содержит другие символы. И система не находит файл! Мы его видим, а система нет, поскольку система ищет по внутреннему имени, а оно отличается.
И в результате даже переименовать иногда невозможно, поскольку система ищет файл именно по внутреннему имени. С такой проблемой можно справится только средствами типа DiskEditor, позволяющими переименовать непосредственно на диске, миную файловую систему. Даже файловые менеджеры не помогают, поскольку они тоже работают через файловую систему. Разве что использовать короткое (8.3) имя файла.
Для удаления проблемного файла можно попытаться удалить его по короткому имени (8.3).
Короткое имя можно узнать, запустив в командной строке cmd и выполнив команду dir /x (предварительно рекомендуется заранее перейти в папку с проблемным файлом, чтобы не бродить по папкам в консольном режиме, а также чтобы не мешало множество других файлов в этой папке, можно временно все нормально читающиеся файлы переместить в другую папку).
Получим нечто такое:
Код:
F:Arctmp>dir /x
Том в устройстве F имеет метку Data
Серийный номер тома: 84EB-F425
Содержимое папки F:Arctmp
16.08.2012 15:19 <DIR> .
16.08.2012 15:19 <DIR> ..
10.02.2009 15:07 21 336 BFE7~1.RTF Толстой После бала.rtf
1 файлов 21 336 байт
2 папок 26 253 103 104 байт свободно
Красным отмечено короткое имя.
Когда узнаете короткое имя, можно попробывать удалить командой del, например, del BFE7~1.RTF (пробел после del обязателен).
|