Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут
закрыты.
Читайте
требования к создаваемым темам.
-
SAS
-
- Продвинутый пользователь
-
-
- Сообщения: 101
- Зарегистрирован: 21.06.2005 (Вт) 0:30
- Откуда: Петропавловск-Камчатский
-
SAS » 08.07.2005 (Пт) 1:03
Как можно перечислить все файлы по заданному пути (например просто написать их список в текстбоксе) и определить: является каждый из перечисленных файлом или папкой?
-
tyomitch
-
- Пользователь #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
-
-
- Сообщения: 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
-
-
- Сообщения: 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 наук
-
-
- Сообщения: 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
-
-
- Сообщения: 5511
- Зарегистрирован: 02.12.2002 (Пн) 17:11
- Откуда: Russia, Saint-Petersburg
-
RayShade » 19.12.2005 (Пн) 13:02
Да.
И еще раз повторюсь
-
keks-n
-
- Доктор VB наук
-
-
- Сообщения: 2509
- Зарегистрирован: 19.09.2005 (Пн) 17:17
- Откуда: г. Москва
-
keks-n » 19.12.2005 (Пн) 17:01
Да я, в принципе согласен, уже понял свою ошибку.
З. Ы. Если делать через API, то работает шустрее.
Вернуться в Visual Basic 1–6
Кто сейчас на конференции
Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 22