Тотальная неудачница и убийца жёстких дисков.
#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)
#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)