Дело об ошибке копирования

Тема в разделе "Microsoft Windows 7", создана пользователем Саныч, 21 июл 2009.

  1. Саныч
    Оффлайн

    Саныч Активный пользователь

    Сообщения:
    869
    Симпатии:
    1.697
    Однажды один из моих друзей обратился ко мне за помощью. Он поведал мне, что столкнулся с проблемой при копировании изображений на свой USB-драйв. После копирования более 200 фотографий неожиданно возникла ошибка, после которой стало невозможным скопировать изображение и стало появляться следующее сообщение:

    [​IMG]

    К сожалению, сообщение "Невозможно создать файл или папку" никоим образом не указывало на причину проблемы и не сообщало, где следует искать решение. Мой знакомый был весьма сообразительным, поэтому, прежде чем обратиться ко мне, проверил, что места на диске было предостаточно, но все-таки запустил утилиту Chkdsk для проверки памяти на повреждения. Однако, результатов это не дало, хотя ошибка продолжала неустанно появляться при попытке копирования
    изображений на флэш-драйв.
    Я, со своей стороны, я попросил его запустить Process Monitor, утилиту, которая в реальном времени регистрирует все обращения к файловой системе и реестру, что теоретически позволяет определить причину различных сбоев и ошибок ОС. Затем он отправил мне отчет утилиты в формате PML и я открыл его. После установки фильтра по букве диска, а затем фильтра операций, относящихся непосредственно к копированию информации, я стал прочесывать отчет на наличие ошибок. Собственно, мне не потребовалось много времени, поскольку в последней строке отчета и была ошибка, вызывающая диалог системы:

    [​IMG]

    С целью экономии пространства на рабочем столе компьютера Process Monitor добавляет к отображаемым ошибкам префикс "STATUS", поэтому действительной системной ошибкой в данном случае являлась STATUS_CANNOT_MAKE. Лично я никогда не слышал и, тем более, не видел подобную ошибку. Кроме того, вместо имени ошибки Process Monitor показывал ее код - 0xc00002ea, поэтому пришлось поискать в файле Ntstatus.h из Windows Device Driver Kit, а затем добавить в Process Monitor функцию, конвертирующую коды ошибок в текст.

    Тогда мне удалось отыскать ошибку в исходном коде Windows, но что насчет тех, кто не имеет возможности покопаться в исходном коде ОС. Как им решить данную проблему? Поиск привел меня к старой ветке в новостной группе для разработчиков файловой системы Windows:

    [​IMG]


    Безусловно, раздел был отформатирован под файловую систему FAT и множество файлов, включая файлы с длиными именами, вполне могли использовать все доступные 512 корневых папок.

    Проблему удалось-таки решить. Я посоветовал моему приятелю два варианта: 1) создать в корневой директории подпапку и скопировать оставшиеся файлы туда или 2) отформатировать флэш-драйв под файловую систему FAT32, что уберет ограничения по числу файлов/папок в корневой директории диска.

    Тем не менее, один вопрос остался нерешенным. Почему диск был форматирован под FAT вместо FAT32? Причина кроется и в производителе USB-драйва и в диалоге форматирования, используемом в Windows. Я не уверен, но по-моему большинство производителей форматируют выпускаемые накопители под FAT, поскольку данная система гарантированно работает там, где другие файловые системы, как FAT32, не поддерживаются. Например в DOS 6 и Windows 95.

    Что до Windows, то я всегда думал, что по умолчанию предлагается форматировать диск под FAT32, но диалог форматирования для одного из моих устройств показал, что это не так:

    [​IMG]


    Мне не удалось найти рекомендации по созданию данного диалога, но быстрый взгляд на исходный код показал, что Windows по умолчанию предлагает форматировать под FAT все не-CD-ROM-подобные извлекаемые устройства размером менее 4GB.

    Думаю, что дело об ошибке копирования можно закрыть, но я чувствую себя обязанным сделать два дела: 1) попытаться сделать сообщения об ошибках более понятными и 2) лоббировать изменение формата, используемого по умолчанию для форматирования флэш-драйвов, на FAT32.


    Перевод: deeper2k


    Источник
     

Поделиться этой страницей