Страница: 1 |
Вопрос: Помогите с рекурсией Dir | Добавлено: 16.05.03 03:42 |
Автор вопроса: ![]() |
хочу забить в массив список файлов из папки и всех подпапок, вылетает после возвращения из первой диры (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 ;) заранее спасибо всем откликнувшимся... |
Ответы | Всего ответов: 9 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() Вопросов: 1 Ответов: 184 |
Профиль | Цитата | #1 | Добавлено: 16.05.03 06:03 |
Вылетает на строке ReDim Preserve arrFiles(UBound(arrFiles) + 1) при первом сюда попадании, а конкретно UBound(arrFiles), так как ранее размерность массива не определена. Дальше не смотрел. |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() Вопросов: 1 Ответов: 184 |
Профиль | Цитата | #2 | Добавлено: 16.05.03 08:22 |
MyName = Dir("") |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 86 Ответов: 920 |
Профиль | Цитата | #3 | Добавлено: 16.05.03 09:17 |
u-u, vot taka:
|
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 86 Ответов: 920 |
Профиль | Цитата | #4 | Добавлено: 16.05.03 09:25 |
i on u mya vyletaet na ReDim stroke. |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 32 Ответов: 50 |
Web-сайт: Профиль | Цитата | #5 | Добавлено: 16.05.03 13:59 |
ну это-то решается просто (это я по сонному делу не весь ко впихнул), перед вызовом функция пишется ReDim arrFiles(0) а потом уже EnumFiles "C:\Mydir" или другой путь |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 32 Ответов: 50 |
Web-сайт: Профиль | Цитата | #6 | Добавлено: 16.05.03 14:14 |
а примеры со скобками не помогают, все равно вылетает MyName = Dir("") - читает из другой диры MyName = Dir() - то же самое что и без скобок |
Номер ответа: 7 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 86 Ответов: 920 |
Профиль | Цитата | #7 | Добавлено: 16.05.03 20:05 |
nu, u mya esli v skobkah bez kavychek, vse kak po maslu. |
Номер ответа: 8 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 32 Ответов: 50 |
Web-сайт: Профиль | Цитата | #8 | Добавлено: 17.05.03 03:08 |
8-О интересно, у меня не пашет, вылетает на второй дире, если в предыдущей нет поддиров.. а какую InitialDir ты ей даешь за основу??? и есть ли какие настройки у VB по рекурсии и ф-ции дир??? |
Номер ответа: 9 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() Вопросов: 32 Ответов: 50 |
Web-сайт: Профиль | Цитата | #9 | Добавлено: 18.05.03 02:49 |
вот решение проблемы: 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 |
|