Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Недавно один мой знакомый обратился ко мне за помощью. По его словам, он столкнулся с проблемой при копировании изображений на флэш-накопитель USB. После успешного копирования двух с лишним сотен фотографий на экране появилось диалоговое окно с сообщением об ошибке (см. иллюстрацию). Впоследствии оно появлялось при каждой повторной попытке выполнить копирование.
К сожалению, сообщение “The directory or file cannot be created” (Не удается создать файл или папку) никоим образом не указывало на причину проблемы, обозначало ее как непредвиденную и не сообщало, где именно следует искать «дополнительные сведения». Уровень грамотности моего знакомого был достаточно высок, чтобы, прежде чем обратиться ко мне, убедиться в том, что места на диске было достаточно, и запустить служебную программу Chkdsk для проверки на предмет повреждений диска. Впрочем, результата это не принесло, и ошибка продолжала появляться при всех последующих попытках копирования изображений на флэш-накопитель. В большом недоумении, знакомый обратился ко мне.
Я попросил его записать трассировку программой мониторинга файловой системы и реестра в реальном времени Process Monitor, которая позволяет выявить ошибки ОС, фактически возвращаемые файловой системой. Справившись с задачей, он отправил мне отчет программы в виде PML-файла, который я и открыл на собственном компьютере. Ограничив с помощью фильтра предмет исследования одним томом и операциями, связанными с копированием файлов, я стал изучать трассировку на наличие ошибок снизу вверх. Это не составило труда - уже в последней строке была замечена ошибка, которая, по всей видимости, и инициировала появление диалогового окна.
С целью экономии пространства экрана программа Process Monitor удаляет из кодов ошибок префикс "STATUS", поэтому на самом деле выделенная ошибка ОС обозначается как STATUS_CANNOT_MAKE. Честно говоря, в момент обнаружения я не имел о ней никакого представления. Вообще-то тогда еще программа Process Monitor показывала даже не текстовый, а шестнадцатеричный код ошибки - 0xc00002ea, так что ее текстовый код пришлось поискать в заголовочном файле Ntstatus.h из пакета для разработчиков драйверов устройств для Windows, а впоследствии добавить в Process Monitor функцию, конвертирующую коды ошибок в текст.
В этот момент я мог бы схитрить и поискать ошибку в исходном коде ОС Windows, но мне хотелось выяснить, что в этой ситуации смогут сделать люди, не имеющие такой возможности. Поискав в Интернете, я наткнулся на старую цепочку обсуждений в группе новостей для разработчиков файловой системы Windows.
Действительно, как выяснилось, том был отформатирован с применением файловой системы FAT. Поскольку файлов на диске было много, а некоторые из них имели длинные имена, проблема с заполнением всех 512 записей, отведенных под дочерние элементы корневого каталога, вполне могла возникнуть.
Итак, загадка была разгадана. Я посоветовал знакомому два варианта: либо создать в корневом каталоге тома подкаталог и скопировать оставшиеся файлы туда, либо отформатировать том с применением файловой системы FAT32, тем самым сняв ограничение на число дочерних элементов корневого каталога.
Впрочем, один вопрос оставался нерешенным. Почему вообще диск был отформатирован на основе файловой системы FAT, а не FAT32? Это связано как с политикой производителя флэш-накопителя, так и с особенностями диалогового окна форматирования ОС Windows. Я не уверен, но могу предположить, что многие производители флэш-накопителей форматируют свои устройства на основе файловой системы FAT, поскольку в таком случае они гарантированно работают практически во всех операционных системах, в том числе в тех, что не поддерживают файловую систему FAT32, как то DOS 6 и Windows 95.
Что касается современных версий ОС Windows, то я думал, что по умолчанию в них при форматировании предлагается файловая система FAT32, но, открыв диалоговое окно форматирования одного из своих USB-накопителей, я понял, что ошибался.
В Интернете мне не удалось найти описание алгоритма, которого придерживается это диалоговое окно, так что пришлось покопаться в исходном коде Windows. Оказалось, что при форматировании съемных томов (за исключением компакт-дисков) емкостью менее 4 ГБ по умолчанию предлагается файловая система FAT.
Полагаю, что дело об ошибке копирования файлов можно считать раскрытым, но есть две задачи, которые мне еще предстоит решить: во-первых, попробовать добиться замены сообщения об ошибке на более информативное, а во-вторых, постараться убедить коллег сменить файловую систему, предлагаемую по умолчанию, на FAT32. Пожелайте мне удачи!