Форум программистов, компьютерный форум, киберфорум
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.92/124: Рейтинг темы: голосов - 124, средняя оценка - 4.92
 Аватар для Ciberst
559 / 436 / 21
Регистрация: 16.12.2010
Сообщений: 953

Получаем список файлов и папок

23.02.2011, 11:53. Показов 26554. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Господа, Форумчане!
Хочу получить список файлов и папок допусти моей флешки (раздел G:\)
вот код, почему то не все файлы и папки получает он.
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
Imports System.IO
Public Class Form1
    Public Shared list As New Windows.Forms.CheckedListBox
    Public Shared ready As Boolean = False
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
 
    End Sub
 
    Private Sub BackgroundWorker1_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
        scan_files()
    End Sub
    Private Sub scan_files()
    
        Dim tmp As New List(Of String)
        Dim di As New DirectoryInfo("G:\")
        scan_files2("G:\")
        Dim filesList As DirectoryInfo() = di.GetDirectories()
        For Each file As DirectoryInfo In filesList
            list.Items.Add(file.FullName)
            tmp.Add(file.FullName)
        Next
 
        For i = 0 To tmp.Count - 1
            Try
                Dim di2 As New DirectoryInfo(tmp(i) & "\")
                Dim filesList2 As DirectoryInfo() = di2.GetDirectories()
                For Each file2 As DirectoryInfo In filesList2
                    list.Items.Add(file2.FullName)
                    tmp.Add(file2.FullName)
                Next
                scan_files2(tmp(i) & "\")
            Catch ex As Exception
 
            End Try
        Next
        ready = True
 
    End Sub
    Private Sub scan_files2(ByVal path As String)
      
        Dim di3 As New DirectoryInfo(path)
        Dim filesList3 As FileInfo() = di3.GetFiles()
        For Each file3 As FileInfo In filesList3
            list.Items.Add(file3.FullName)
        Next
    End Sub
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        CheckedListBox1.Items.Clear()
        Try
            BackgroundWorker1.WorkerReportsProgress = True
            BackgroundWorker1.RunWorkerAsync()
        Catch ex As Exception
            MsgBox("Ошибка", ex.Message)
        End Try
    End Sub
 
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        If ready = True Then
            ready = False
            CheckedListBox1.Items.AddRange(list.Items)
            list.Items.Clear()
        End If
 
    End Sub
 
End Class
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
23.02.2011, 11:53
Ответы с готовыми решениями:

Список файлов дисков и папок в VB2005
Помогите пожалуйста. В VB6 были такие элементы управления FileListBox,DirListBox для просмотра файлов и папок. Есть ли подобные в VB2005...

Подскажите как получить список всех папок и файлов на диске С
Подскажите как получить список всех папок и файлов на диске С ?

Получить список папок в Combobox
Здравствуйте! Как проверить папки по определённому адресу и добавить последние в этом адресе папку в combobox? Поясняю. Есть Combobox....

21
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
23.02.2011, 12:24
А какой смысл получать список файлов в отдельном потоке,и почему бы сразу не добавлять список в чекбокс, а не использовать сначала лисбокс да еще через таймер?
0
 Аватар для Ciberst
559 / 436 / 21
Регистрация: 16.12.2010
Сообщений: 953
23.02.2011, 12:31  [ТС]
Цитата Сообщение от Eugene22 Посмотреть сообщение
А какой смысл получать список файлов в отдельном потоке,и почему бы сразу не добавлять список в чекбокс, а не использовать сначала лисбокс да еще через таймер?
Потому что приложение если не через поток будет казаться что оно зависло
0
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
23.02.2011, 12:37
Ну тут надо различать, зависло ли оно реально или,кажется, что оно зависло. В последнем случае, можно ввести некоторый указатель на ход операции - например прогрессбар или перед началом выполнения операции указывать заголовок формы, например,- "Подождите...Выполняется операция...", а после окончания операции установить оригинальный заголовок формы.
А вообще все можно сделать и однопоточным приложением.
0
 Аватар для Ciberst
559 / 436 / 21
Регистрация: 16.12.2010
Сообщений: 953
23.02.2011, 12:49  [ТС]
Разницу я понимаю я же написал что кажется что зависло, поэтому дело не в этом, а дело в том что не все файлы получает программа, в чем ошибка?
0
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
23.02.2011, 13:26
Не получается, потому что не те методы используешь. Есть прекрасное понятие, без которого программирование в ряде случаев трудно представить - рекурсия. Создание коллекции и перебор ее в цикле - конечно. интересный способ, но в данном случае лучше использовать рекурсивный обход папок. Например,
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Get_Directories(ByVal _path As String)
 
        For Each dir_name As String In Directory.GetDirectories(_path)
            ListBox1.Items.Add(dir_name)
            Get_Directories(dir_name)
        Next
 
        For Each file_name As String In Directory.GetFiles(_path)
            ListBox1.Items.Add(file_name)
        Next
    End Sub
 
    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Get_Directories("D:\имя_папки\")
    End Sub
Единственный неприятный момент - если в папке много папок и файлов - то вывод результата может занять продолжительное время
1
Почетный модератор
 Аватар для Памирыч
23248 / 9160 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
23.02.2011, 14:51
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Цитата Сообщение от Eugene22 Посмотреть сообщение
Единственный неприятный момент
Ну это в порядке вещей
Другой камень, что может заставить кодера удалить его писульки и снести студию, а в статусе в соц.сетях поставить "Я больше не кодер" - это то, что такие поисковики имеют свойство зацикливаться навсегда в определенных папках в системе. Я конечно понимаю, что речь о флешке, но кто даст зуб на то, что не попадется такая беда и на фрэшке?

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub Search(ByVal fold As String, ByVal mask As String)
        Dim Dirs As String()
        Dim files As String()
        Dim cdir As String
        Try
            files = System.IO.Directory.GetFiles(fold, mask)
            Me.ListBox1.Items.AddRange(files)
            Dirs = System.IO.Directory.GetDirectories(fold, "*", IO.SearchOption.TopDirectoryOnly)
        Catch ex As Exception
            
        End Try
        If Not Dirs Is Nothing Then
            For Each cdir In Dirs
                Me.Search(cdir, mask)
            Next
        End If
    End Sub
3
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
23.02.2011, 15:14
такие поисковики имеют свойство зацикливаться навсегда в определенных папках в системе
- например, в каких папках?
0
Почетный модератор
 Аватар для Памирыч
23248 / 9160 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
23.02.2011, 16:12
Eugene22, Да щас и навскидку не вспомню, в ХР это была System Volume Information и пара папок, к которым доступ закрыт, а в семерке их чето было несколько, их я только таким макаром победил.
0
_
2364 / 1243 / 78
Регистрация: 28.10.2009
Сообщений: 4,331
23.02.2011, 16:55
Ну тут особой проблемы нет - я просто не выводил сообщение об исключении и все. Хотя содержимое папок осталось под завесой тайны. Хотя можно попробовать програмно изменить атрибуты папки
0
Почетный модератор
 Аватар для Памирыч
23248 / 9160 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
23.02.2011, 18:46
Цитата Сообщение от Eugene22 Посмотреть сообщение
я просто не выводил сообщение об исключении и все
Вот и я тоже, а самое плохое в том, что после этой папки уже ничего не искалось.
0
 Аватар для Юпатов Дмитрий
1721 / 1208 / 228
Регистрация: 23.12.2010
Сообщений: 1,544
23.02.2011, 23:20
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Памирыч, но ведь в итоге же все получилось...
Что ты человека пугаешь?

на форме: 2 Textbox-a, 2 Button-a, 1 Listbox
Именя элементов я оставил по-умолчанию
Вот листинг:
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
Public Class Form1 
 
    Dim ex_count As Integer 
 
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
        Dim RDS As New FolderBrowserDialog 
        With RDS 
            .RootFolder = Environment.SpecialFolder.MyComputer 
            .ShowNewFolderButton = False 
            .Description = "Выберите корневой каталог поиска" 
        End With 
        If RDS.ShowDialog = Windows.Forms.DialogResult.OK Then 
            Me.TextBox1.Text = RDS.SelectedPath 
        End If 
    End Sub 
 
    Private Sub Search(ByVal fold As String, ByVal mask As String) 
        Dim Dirs As String() 
        Dim files As String() 
        Dim cdir As String 
        Try 
            files = System.IO.Directory.GetFiles(fold, mask) 
            Me.ListBox1.Items.AddRange(files) 
            Dirs = System.IO.Directory.GetDirectories(fold, "*", IO.SearchOption.TopDirectoryOnly) 
        Catch ex As Exception 
            ex_count = ex_count + 1 
        End Try 
        If Not Dirs Is Nothing Then 
            For Each cdir In Dirs 
                Me.Search(cdir, mask) 
            Next 
        End If 
    End Sub 
 
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 
        Me.ex_count = 0 
        Me.Enabled = False 
        Me.ListBox1.Items.Clear() 
        Me.Search(Me.TextBox1.Text, Me.TextBox2.Text) 
        Me.Enabled = True 
        Dim infostr As String = "Поиск завершен." & vbCrLf & "Найдено " & Me.ListBox1.Items.Count & " файлов." & vbCrLf & vbCrLf & "Обработано " & Me.ex_count & " исключений." 
        MsgBox(infostr, MsgBoxStyle.Information) 
    End Sub 
End Class
2
Почетный модератор
 Аватар для Памирыч
23248 / 9160 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
24.02.2011, 06:16

Не по теме:

Юпатов Дмитрий, Какие люди!!! Дюже удивлен!!!


Я просто о том, что надо все исключения обрабатывать
0
 Аватар для Vlad11
10 / 10 / 2
Регистрация: 12.05.2014
Сообщений: 229
20.09.2014, 19:56
"Спят, спят мышата и ребята ..." (Из Советской классики)
только я горемыка, тут
Юпатов Дмитрий,
Дима, я тут ковыряю твой пример, и у меня он что то не играет:
Найдено 0 файлов
Обработано 0 исключений
Извини уж меня

Добавлено через 17 часов 44 минуты
Цитата Сообщение от Памирыч Посмотреть сообщение
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub Search(ByVal fold As String, ByVal mask As String)
 Dim Dirs As String()
 Dim files As String()
 Dim cdir As String
 Try
 files = System.IO.Directory.GetFiles(fold, mask)
 Me.ListBox1.Items.AddRange(files)
 Dirs = System.IO.Directory.GetDirectories(fold, "*", IO.SearchOption.TopDirectoryOnly)
 Catch ex As Exception
End Try
 If Not Dirs Is Nothing Then
 For Each cdir In Dirs
 Me.Search(cdir, mask)
 Next
 End If
 End Sub
ну не знаю, я уже и по диагонали пишу этот код - ListBox пустой
КАРАУЛ!
0
Почетный модератор
 Аватар для Памирыч
23248 / 9160 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
20.09.2014, 20:12
Цитата Сообщение от Vlad11 Посмотреть сообщение
ну не знаю, я уже и по диагонали пишу этот код
Куда пишете и как вызываете?
0
 Аватар для Vlad11
10 / 10 / 2
Регистрация: 12.05.2014
Сообщений: 229
20.09.2014, 20:16
Цитата Сообщение от Памирыч Посмотреть сообщение
Куда пишете и как вызываете?
Создал форму, на форме листБокс
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Public Class Form1
    Private Sub Search(ByVal fold As String, ByVal mask As String)
 
        Dim Dirs As String()
 
        Dim files As String()
        Dim cdir As String = "d:\vvv"
        Try
            files = System.IO.Directory.GetFiles(fold, mask)
            Me.ListBox1.Items.AddRange(files)
            Dirs = System.IO.Directory.GetDirectories(fold, "*", IO.SearchOption.TopDirectoryOnly)
        Catch ex As Exception
 
        End Try
        If Not Dirs Is Nothing Then
            For Each cdir In Dirs
                Me.Search(cdir, mask)
            Next
        End If
    End Sub
End class
0
Почетный модератор
 Аватар для Памирыч
23248 / 9160 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
20.09.2014, 20:44
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Значит так.

То, что Вы вставили - называется процедура. Она готовая и в ней ничего править не надо.

Раз это процедура, да еще и с параметром, то ее надо вызывать, иначе она просто лежит мертвым капиталом
Вы ее нигде не вызываете. А надо:
Допустим, по кнопке:

VB.NET
1
2
3
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
         Search("C:\", "*.txt")
    End Sub
Вот так вызываются процедуры.
В данном случае в листбокс попадут все текстовые файлы с диска С
1
 Аватар для Vlad11
10 / 10 / 2
Регистрация: 12.05.2014
Сообщений: 229
20.09.2014, 21:25
Цитата Сообщение от Памирыч Посмотреть сообщение
Значит так.
значит так, поставил,работает.

Не по теме:

Куда я ее только не ставил:-[
и в Form1_Load, и что я только не городил...:-[
и параметры пытался прилепить ко всему где только было место:jokingly:



Добавлено через 12 минут
Памирыч,
Имена файлов выводятся и с Path-ми,
а как убрать пути, нужны только имена файлов

Добавлено через 4 минуты
поменять GetDirectories на GetFileSystemEntries???

Добавлено через 1 минуту
нет, результат тот же
0
Почетный модератор
 Аватар для Памирыч
23248 / 9160 / 1084
Регистрация: 11.04.2010
Сообщений: 11,014
20.09.2014, 21:25
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

https://www.cyberforum.ru/post1942265.html
В частности спойлер "Как получить имя файла без полного пути"

И вообще, полистайте наш FAQ, старт будет легче
0
 Аватар для Anderis49
-42 / 41 / 6
Регистрация: 07.08.2013
Сообщений: 1,112
Записей в блоге: 1
13.05.2015, 11:47
Всем доброго времени суток!
Прошу прощения, что поднимаю эту тему, но у меня что-то замкнуло.
Не могу понять, как получить только имена каталогов, помогите!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.05.2015, 11:47
Помогаю со студенческими работами здесь

Получить список папок с их размером
Всем привет! На форме есть listview и кнопка. Подскажите. пожалуйста, как можно получить список папок из определенной директории(только...

Отображение в ListView папок и файлов
Всем привет. Есть следующий код: Dim errors As String Private Sub Form1_Load(sender As Object, e As EventArgs) Handles...

Определить размер очищенных файлов и папок
Здравствуйте, у меня такой код очистки 'Очистка Mozilla Firefox On Error Resume Next If...

Как вывести список полей и папок в Outlook ?
Прочитать конкретную папку и вывести записи по конкретным полям не представляет трудностей. А как создать список папок с вложением, а...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru