Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Помогите с рекурсией Dir Добавлено: 16.05.03 03:42  

Автор вопроса:  Rebel | Web-сайт: rebel.bos.ru

хочу забить в массив список файлов из папки и всех подпапок, вылетает после возвращения из первой диры (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
Автор ответа:
 USA



Вопросов: 1
Ответов: 184
 Профиль | | #1 Добавлено: 16.05.03 06:03

Вылетает на строке

ReDim Preserve arrFiles(UBound(arrFiles) + 1)

при первом сюда попадании, а конкретно UBound(arrFiles), так как ранее размерность массива не определена. Дальше не смотрел.

Ответить

Номер ответа: 2
Автор ответа:
 USA



Вопросов: 1
Ответов: 184
 Профиль | | #2 Добавлено: 16.05.03 08:22

MyName = Dir("")

Ответить

Номер ответа: 3
Автор ответа:
 AASoft



Вопросов: 86
Ответов: 920
 Профиль | | #3 Добавлено: 16.05.03 09:17

u-u, vot taka:

MyName = Dir()

 

 

 

Ответить

Номер ответа: 4
Автор ответа:
 AASoft



Вопросов: 86
Ответов: 920
 Профиль | | #4 Добавлено: 16.05.03 09:25
i on u mya vyletaet na ReDim stroke.

Ответить

Номер ответа: 5
Автор ответа:
 Rebel



Вопросов: 32
Ответов: 50
 Web-сайт: rebel.bos.ru
 Профиль | | #5
Добавлено: 16.05.03 13:59

ну это-то решается просто (это я по сонному делу не весь ко впихнул),

перед вызовом функция пишется ReDim arrFiles(0)

а потом уже EnumFiles "C:\Mydir" или другой путь

Ответить

Номер ответа: 6
Автор ответа:
 Rebel



Вопросов: 32
Ответов: 50
 Web-сайт: rebel.bos.ru
 Профиль | | #6
Добавлено: 16.05.03 14:14

а примеры со скобками не помогают, все равно вылетает :(

MyName = Dir("") - читает из другой диры

MyName = Dir() - то же самое что и без скобок

Ответить

Номер ответа: 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-сайт: rebel.bos.ru
 Профиль | | #8
Добавлено: 17.05.03 03:08

8-О интересно, у меня не пашет, вылетает на второй дире, если в предыдущей нет поддиров.. а какую InitialDir ты ей даешь за основу??? и есть ли какие настройки у VB по рекурсии и ф-ции дир???

Ответить

Номер ответа: 9
Автор ответа:
 Rebel



Вопросов: 32
Ответов: 50
 Web-сайт: rebel.bos.ru
 Профиль | | #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 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам