14:39

Тотальная неудачница и убийца жёстких дисков.
#post-id: 3582-00-50
#original-date: 17.05.2010 Mon
#original-time: 12:50 AM
#original-day:  3582
#original-host: WinXP Prof SP2 (Build 2600)

Типичный алгоритм рекурсивной работы с файлами.

1. Сначала мы получаем через стандартный Dir() список всех файлов в каталоге.

2. Потом обрабатываем все файлы.

3. Потом обрабатываем все каталоги. Обычно на третьем шаге мы ныряем рекурсивно и обрабатываем точно также подкаталог.

Это присказка. В Clear recent я повсеместо использовала GetFileAttributes() чтобы определить, каталог это или нет. Всё работало пока я не взялась переписывать удаление дерева каталогов. Неожиданно выяснилось, что функция ныряет в файлы, считая их подкаталогами. Ну, не чего страшного это не вызывает, но на RmDir() после этого VB обижается.

В чём дело? Что за мистика? Оказалось, что на втором шаге все файлы удалялись, и при запросе атрибутов несуществующего файла функция возвращала -1, а следовательно макаронина с AND возвращала значение больше нудя - это каталог. Ну и случалась неприятность.

Раньше я этого не замечала только потому что все остальные функции не пытались удалить каталоги, а ошибки в Dir() функции просто проглатывались, и в итоге получался постой список файлов и каталогов, который программа не трогала.

Разумеется, я пошла писать фугкцию для обработки такой ситуации. Потом подумала, что неплохо бы в общею библиотеку её добавить. На всякий пожарный заглянула и прослезилась - asIsDirectory() там была уже очень давно...

#music: 小西寛子\AIKa Music Collection - 1\More Natural (Short Size)

Комментарии
16.05.2010 в 20:31

Frozen flame
Наши велосипеды более квадратнее и надёжнее даже наших предыдущих велосипедов! :)
17.05.2010 в 02:01

Тотальная неудачница и убийца жёстких дисков.
А что делать? ^^'