Когда файл не является объектом файловой системы? - PullRequest
3 голосов
/ 29 ноября 2011

У меня есть код, который перечисляет папку «Избранное» (рекурсивно) с помощью API оболочки.Я использую функцию GetAttributesOf для получения атрибутов каждого найденного объекта.

Поскольку я никогда не продвигаюсь вверх, я ожидаю, что все элементы, с которыми я столкнусь, будут объектами файловой системы.Вероятно, это не относится ко всем подкаталогам, но я вполне уверен, что это верно и для рассматриваемого подкаталога.

Несмотря на мою уверенность, я проверяю, что атрибуты включают SFGAO_FILESYSTEM.Если они этого не делают, то я регистрирую сообщение и пропускаю элемент, потому что нет надежды на то, что я смогу выполнить свою работу.Я ожидал, что никогда не увижу запись в журнал или не пропущу элемент, но все равно вставляю подтверждение, потому что так я катаюсь.

Несколько недель спустя мой превосходный инженер по обеспечению качества говорит мне, что он видит, что моя программа плохо себя ведетчто касается конкретного элемента и времени его выполнения, он видит в журнале, что для элемента не установлен бит файловой системы, и его необходимо было пропустить.У нас есть веские основания полагать, что файл - это файл.

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

Когда файл не является объектом файловой системы?

Ответы [ 2 ]

1 голос
/ 26 декабря 2011

Неясно, используете ли вы устаревшую файловую систему или NTFS, но есть несколько вещей, которые могут потенциально убить бит файловой системы - Vista представила символические ссылки, которые не являются тем же, что и обычные ярлыки, и поскольку они анализируют "клиент"со стороны »они могут не считаться объектами файловой системы как таковыми.Аналогично с точками повторной обработки каталога.Перечисление SFGAO не является полностью представлением 1: 1 того, что происходит в NTFS, так что воспринимайте эту информацию с недоверием.

Существует также внешняя вероятность того, что из-за плохих блоков Windows может сообщить оФайловая система немного противоречива.Это станет вашим единственным объяснением, если одни и те же файлы иногда сообщаются как объекты файловой системы, а иногда нет.

0 голосов
/ 28 декабря 2011

Вы делаете это рекурсивно?

Если вы спуститесь в архив (например, в виде zip или cab-файла), вы увидите объекты, не являющиеся файловой системой.

Аналогичным образом, если вы спуститесь в каталог с файлом desktop.ini, вы можете увидеть объекты не файловой системы (но это зависит от того, что делает COM-объект, на который ссылается desktop.ini).

Хотя в обоих этих случаях вы ожидаете увидеть не найденную ошибку, а не отказано в доступе, если попытаетесь получить доступ к объекту в виде файла. Есть ли вероятность, что у вас нет прав доступа к файловой системе для объектов-нарушителей?

Функции NTFS, такие как символические ссылки и точки повторной обработки, сообщаются как объекты файловой системы, поэтому они определенно не являются проблемой.

...