Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Снова поиск

313
19 декабря 2006 года
insane88
440 / / 13.12.2006
Всем привет!
Как-то в разделе winapi 32 я спросил, как перечислить файлы. Ответ мне пришел, но прога почему-то не работает. Все дело в именах найденнных файлов (сзади добавляются тучи нечиатемых символов). Может, кто знает, в чем дело?
313
19 декабря 2006 года
insane88
440 / / 13.12.2006
Да, кстати, вот и сама прога...:rolleyes:
405
20 декабря 2006 года
Dmitrii
554 / / 16.12.2004
insane88, если бы я не видел Вашу тему в разделе по WinAPI, то, скорее всего, не догадался бы, в чём заключается задача.
Совет на будущее: помещая тему в новый раздел, описывайте задачу полностью.

Приложенный Вами код у меня не работает. Смысл сообщения об ошибке - исчерпан размер стека.
Поскольку с WinAPI я знаком плохо, то могу лишь предложить свой вариант решения (он основан на использовании FSO).
Алгоритм остался прежним - рекурсивный спуск по дереву каталогов.
Код:
Public resFile As Object
Public Const resFileSpec = "c:\ListFiles.txt"

Sub Main()
Dim fsObj As Object
Const sourceDir = "c:\temp"

Set fsObj = CreateObject("Scripting.FileSystemObject")
If fsObj.FolderExists(sourceDir) = True Then
    Set resFile = fsObj.OpenTextFile(resFileSpec, 2, True)
    Call ViewFolder(sourceDir)
    resFile.Close
    MsgBox "Готово", vbInformation, "Отчёт"
Else
    MsgBox "Отсутствует каталог-источник: " & UCase(sourceDir), vbCritical, "Ошибка"
End If
Set fsObj = Nothing
End Sub

Private Function ViewFolder(dirSource As String)
Dim fsObj As Object, pntDir As Object, curSubDir As Object

Set fsObj = CreateObject("Scripting.FileSystemObject")
Set pntDir = fsObj.GetFolder(dirSource)
resFile.WriteLine (UCase(dirSource))
Call Enum_Files(dirSource)
resFile.WriteLine ("")
For Each curSubDir In pntDir.SubFolders
    Call ViewFolder(curSubDir.Path)
Next curSubDir
Set pntDir = Nothing
Set fsObj = Nothing
End Function

Private Function Enum_Files(dirSource As String)
Dim fsObj As Object, pntDir As Object, curFile As Object

Set fsObj = CreateObject("Scripting.FileSystemObject")
Set pntDir = fsObj.GetFolder(dirSource)
For Each curFile In pntDir.Files
    resFile.WriteLine (curFile.Name)
Next curFile
Set pntDir = Nothing
Set fsObj = Nothing
End Function

Примечания:
1. По сравнению с функциями API работать будет медленнее.
2. Код проверен в составе проекта на VB6 под Windows 2000 Pro.
313
20 декабря 2006 года
insane88
440 / / 13.12.2006
Спасибо, принял к сведению. Вообще, проблема с переполнением стека связана с тем, что на концах имен найденнных файлов тучи нулевых символов. Я разрешил эту проблему. Кстати, спасибо за этот вариант перечисления, я до этого плохо представлял как пользоваться FSO.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог