Страница: 1 |
хочу забить в массив список файлов из папки и всех подпапок, вылетает после возвращения из первой диры (invalid procedure call or argument), код такой: Private arrFiles() As String Private Sub EnumFiles(InitialDir As String) Dim MyName As String If Right(InitialDir, 1) <> "\" Then InitialDir = InitialDir & "\" MyName = Dir(InitialDir, vbDirectory) Do While MyName <> "" If MyName <> "." And MyName <> ".." Then If (GetAttr(InitialDir & MyName) And vbDirectory) = vbDirectory Then EnumFiles InitialDir & MyName Else ReDim Preserve arrFiles(UBound(arrFiles) + 1) arrFiles(UBound(arrFiles) - 1) = InitialDir & MyName End If End If MyName = Dir 'вылетает здесь после того как вылазит из первой диры, invalid procedure call or argument Loop End Sub если кто может помочь, плз F1 ;) заранее спасибо всем откликнувшимся...
Вылетает на строке ReDim Preserve arrFiles(UBound(arrFiles) + 1) при первом сюда попадании, а конкретно UBound(arrFiles), так как ранее размерность массива не определена. Дальше не смотрел. MyName = Dir("") u-u, vot taka: MyName = Dir() ну это-то решается просто (это я по сонному делу не весь ко впихнул), перед вызовом функция пишется ReDim arrFiles(0) а потом уже EnumFiles "C:\Mydir" или другой путь а примеры со скобками не помогают, все равно вылетает MyName = Dir("") - читает из другой диры MyName = Dir() - то же самое что и без скобок 8-О интересно, у меня не пашет, вылетает на второй дире, если в предыдущей нет поддиров.. а какую InitialDir ты ей даешь за основу??? и есть ли какие настройки у VB по рекурсии и ф-ции дир??? вот решение проблемы: Private arrFiles() As String ReDim arrFiles(0) Private Sub EnumFiles(InitialDir As String) Dim MyName As String Dim MyDirs() As String ReDim MyDirs(0) If Right(InitialDir, 1) <> "\" Then InitialDir = InitialDir & "\" MyName = Dir(InitialDir, vbDirectory) Do While MyName <> "" If MyName <> "." And MyName <> ".." Then If (GetAttr(InitialDir & MyName) And vbDirectory) = vbDirectory Then ReDim Preserve MyDirs(UBound(MyDirs) + 1) MyDirs(UBound(MyDirs) - 1) = MyName Else ReDim Preserve arrFiles(UBound(arrFiles) + 1) arrFiles(UBound(arrFiles) - 1) = InitialDir & MyName End If End If MyName = Dir() Loop Dim i As Integer For i = 0 To UBound(MyDirs) - 1 EnumFiles InitialDir & MyDirs(i) Next i End Sub Страница: 1 |
Вопрос: Помогите с рекурсией Dir
Добавлено: 16.05.03 03:42
Автор вопроса: Rebel | Web-сайт:
Ответы
Всего ответов: 9
Номер ответа: 1
Автор ответа:
USA
Вопросов: 1
Ответов: 184
Профиль | | #1
Добавлено: 16.05.03 06:03
Номер ответа: 2
Автор ответа:
USA
Вопросов: 1
Ответов: 184
Профиль | | #2
Добавлено: 16.05.03 08:22
Номер ответа: 3
Автор ответа:
AASoft
Вопросов: 86
Ответов: 920
Профиль | | #3
Добавлено: 16.05.03 09:17
Номер ответа: 4
Автор ответа:
AASoft
Вопросов: 86
Ответов: 920
Профиль | | #4
Добавлено: 16.05.03 09:25
i on u mya vyletaet na ReDim stroke.
Номер ответа: 5
Автор ответа:
Rebel
Вопросов: 32
Ответов: 50
Web-сайт:
Профиль | | #5
Добавлено: 16.05.03 13:59
Номер ответа: 6
Автор ответа:
Rebel
Вопросов: 32
Ответов: 50
Web-сайт:
Профиль | | #6
Добавлено: 16.05.03 14:14
Номер ответа: 7
Автор ответа:
AASoft
Вопросов: 86
Ответов: 920
Профиль | | #7
Добавлено: 16.05.03 20:05
nu, u mya esli v skobkah bez kavychek, vse kak po maslu.
Номер ответа: 8
Автор ответа:
Rebel
Вопросов: 32
Ответов: 50
Web-сайт:
Профиль | | #8
Добавлено: 17.05.03 03:08
Номер ответа: 9
Автор ответа:
Rebel
Вопросов: 32
Ответов: 50
Web-сайт:
Профиль | | #9
Добавлено: 18.05.03 02:49