перечисление файлов в заданной папке

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
SAS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 101
Зарегистрирован: 21.06.2005 (Вт) 0:30
Откуда: Петропавловск-Камчатский

перечисление файлов в заданной папке

Сообщение SAS » 08.07.2005 (Пт) 1:03

Как можно перечислить все файлы по заданному пути (например просто написать их список в текстбоксе) и определить: является каждый из перечисленных файлом или папкой?

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 08.07.2005 (Пт) 1:40

Функция Dir
Изображение

SAS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 101
Зарегистрирован: 21.06.2005 (Вт) 0:30
Откуда: Петропавловск-Камчатский

Сообщение SAS » 08.07.2005 (Пт) 1:47

tyomitch писал(а):Функция Dir

Спасибо. Эта часть вопроса отпала. А как все-таки перечислить файлы и папки, находящиеся по заданному пути?

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 08.07.2005 (Пт) 2:06

Dir - это решение всего твоего вопроса.

Код: Выделить всё
Dim strFileList As String, strFolder As String, _
    strPattern As String
strFolder = Environ("WinDir"): strPattern = "*.exe"
If Right$(strFolder, 1) <> "\" Then strFolder = strFolder & "\"
strFileList = Dir(strFolder & strPattern, vbNormal)
Do Until strFileList = vbNullString
    Debug.Print strFileList
    strFileList = Dir
    DoEvents
Loop


Либо Win32 API:

FindFirstFile
FindNextFile
FindClose
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

SAS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 101
Зарегистрирован: 21.06.2005 (Вт) 0:30
Откуда: Петропавловск-Камчатский

Сообщение SAS » 08.07.2005 (Пт) 3:49

Очень большое спасибо:).
Последний раз редактировалось SAS 19.12.2005 (Пн) 22:44, всего редактировалось 1 раз.

eugene2005
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 178
Зарегистрирован: 30.10.2005 (Вс) 21:35
Откуда: от Верблюда!

Сообщение eugene2005 » 15.12.2005 (Чт) 23:00

BV писал(а):Dir - это решение всего твоего вопроса.

Код: Выделить всё
Dim strFileList As String, strFolder As String, _
    strPattern As String
strFolder = Environ("WinDir"): strPattern = "*.exe"
If Right$(strFolder, 1) <> "" Then strFolder = strFolder & ""
strFileList = Dir(strFolder & strPattern, vbNormal)
Do Until strFileList = vbNullString
    Debug.Print strFileList
    strFileList = Dir
    DoEvents
Loop


Либо Win32 API:

FindFirstFile
FindNextFile
FindClose



этот код даёт бесконечный цикл и зависание компа, тест на АМД 3200
показывает только верхний файл и на нём циклица. хорошая хохма. спасибо

eugene2005
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 178
Зарегистрирован: 30.10.2005 (Вс) 21:35
Откуда: от Верблюда!

Сообщение eugene2005 » 15.12.2005 (Чт) 23:04

Private Sub Form_Load()
File1.Path = "C:\"
Text1.Text = "Ñîäåðæèìîå C:\"
Dim n As Long
For n = 0 To File1.ListCount - 1
Text1.Text = Text1.Text + vbCrLf + File1.List(n)
Next
End Sub

этот код надёжней и рабочий

SAS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 101
Зарегистрирован: 21.06.2005 (Вт) 0:30
Откуда: Петропавловск-Камчатский

Сообщение SAS » 15.12.2005 (Чт) 23:59

eugene2005 писал(а):Private Sub Form_Load()
File1.Path = "C:"
Text1.Text = "Ñîäåðæèìîå C:"
Dim n As Long
For n = 0 To File1.ListCount - 1
Text1.Text = Text1.Text + vbCrLf + File1.List(n)
Next
End Sub

этот код надёжней и рабочий

Спасибо. Моя проблема уже давно решена. Я решил ее используя filesystem object:

Код: Выделить всё
Function GetListOfFiles_Folders(path_)

Set fso = CreateObject("Scripting.FileSystemObject")
Set CurFolder = fso.getfolder(path_)
Set foldersInCurFolder = CurFolder.SubFolders   'это коллекция папок
    For Each sub_folder In foldersInCurFolder
    'непосредственное перечисление папок
        ListOFFolders = ListOFFolders & Chr(13) & Chr(10) & sub_folder.Path
            Set Get_Sub_Folder = fso.getFolder(sub_folder.Path)

' и т.д. (необходимо использовать рекурсию)

Использование filesystem object делает возможным применять этот код не только в vb но и в vbs, что мне собственно и было нужно

BV
Thinker
Thinker
Аватара пользователя
 
Сообщения: 3987
Зарегистрирован: 12.09.2004 (Вс) 0:55
Откуда: Молдавия, г. Кишинёв

Сообщение BV » 16.12.2005 (Пт) 0:37

eugene2005 писал(а):этот код даёт бесконечный цикл и зависание компа, тест на АМД 3200
показывает только верхний файл и на нём циклица. хорошая хохма. спасибо


Быть того не может.
const char *out = "|*0>78-,+<|"; size_t cc = char_traits<char>::length(out);
for (size_t i=0;i<cc;i++){cout<<static_cast<char>((out[i]^89));}cout<<endl;

SAS
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 101
Зарегистрирован: 21.06.2005 (Вт) 0:30
Откуда: Петропавловск-Камчатский

Сообщение SAS » 16.12.2005 (Пт) 0:56

BV писал(а):
Быть того не может.

Тоже так считаю, по идее не должно зависеть от типа процессора

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 16.12.2005 (Пт) 17:49

eugene2005 писал(а):Private Sub Form_Load()
File1.Path = "C:"
Text1.Text = "Ñîäåðæèìîå C:"
Dim n As Long
For n = 0 To File1.ListCount - 1
Text1.Text = Text1.Text + vbCrLf + File1.List(n)
Next
End Sub

этот код надёжней и рабочий


На меня за такой код RayShade ругался, дескать, идеологически неправильное решение.
Изображение

RayShade
Scarmarked
Scarmarked
Аватара пользователя
 
Сообщения: 5511
Зарегистрирован: 02.12.2002 (Пн) 17:11
Откуда: Russia, Saint-Petersburg

Сообщение RayShade » 19.12.2005 (Пн) 13:02

Да.

И еще раз повторюсь :)

keks-n
Доктор VB наук
Доктор VB наук
Аватара пользователя
 
Сообщения: 2509
Зарегистрирован: 19.09.2005 (Пн) 17:17
Откуда: г. Москва

Сообщение keks-n » 19.12.2005 (Пн) 17:01

Да я, в принципе согласен, уже понял свою ошибку.
З. Ы. Если делать через API, то работает шустрее.
Изображение


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex-бот и гости: 30

    TopList