Страница: 1 | 2 |
Вопрос: Список всех файлов
Добавлено: 11.03.07 16:34
Автор вопроса: DaaGER | Web-сайт:
Ответы
Всего ответов: 26
Номер ответа: 16
Автор ответа:
Patriot
ICQ: 439168318
Вопросов: 5
Ответов: 50
Профиль | | #16
Добавлено: 12.03.07 00:14
Зачит Боцман облом тебе пользуйся своим или тут выложели просто шедевр, Neco постарался
И кстати мне интерестно что у тебя там за среда такая, и наверное в системе нету scrrun.dll, вроде такого быть неможет
Номер ответа: 17
Автор ответа:
Боцман
ICQ: 295725312
Вопросов: 53
Ответов: 830
Web-сайт:
Профиль | | #17
Добавлено: 12.03.07 10:34
Извени, среда была алкогольная.
Для вывода списка файлов в небольших папках твой код пойдет, а на счет дисков может у меня такой комп, но я ждать не рискнул. Тот который я приводил за 4 секунды сканирует весь диск С, он у меня всего 3,5 Гб, а твоим я 10 секунд сканировал
C:\Program Files\, там к стати нет не одной установленной программы, кроме FARа.
вот как я использовал твой пример, но как всегда 2 ListBox_са добавить.
Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
Private Sub Command1_Click()
Find_memory
Form1.Caption = "Íàéäåíî ôàéëîâ-" & List1.ListCount & " ïàïîê-" & List2.ListCount
End Sub
Private Sub Form_Load()
Set SC = CreateObject("Scripting.FileSystemObject"
TRV.Nodes.Add , , "MyComp", "Ìîé êîìïüþòåð"
End Sub
Private Sub Find_memory()
On Error Resume Next
Dim strDrive As String, lngType As Long, I As Byte
strDrive = "C:\Program Files\"
lngType = GetDriveType(strDrive)
Select Case lngType
Case 3
TRV.Nodes.Add strDrive, strDrive
Find_folder strDrive, strDrive 'HDD
End Select
End Sub
Private Function Find_folder(PFolder As String, aKey As String)
On Error Resume Next
Set FD = SC.GetFolder(PFolder)
For Each FD In FD.SubFolders
DoEvents
TRV.Nodes.Add aKey, tvwChild, "NFold" & Right(FD.Path, 10), FD.Name
Set FS = SC.GetFolder(FD.Path)
For Each FS In FS.Files
DoEvents
TRV.Nodes.Add "NFold" & Right(FD.Path, 10), tvwChild, "NFile" & Right(FS.Path, 10), FS.Name
List1.AddItem (FS.Name)
List2.AddItem (FD)
Next
Find_folder FD.Path, "NFold" & Right(FD.Path, 10)
Next
End Function
Спасибо за код обязательно возьму на вооружение.
Номер ответа: 18
Автор ответа:
Боцман
ICQ: 295725312
Вопросов: 53
Ответов: 830
Web-сайт:
Профиль | | #18
Добавлено: 12.03.07 10:44
Find_memory
Form1.Caption = "File-" & List1.ListCount & " Folder-" & List2.ListCount
End Sub
Private Sub Form_Load()
Set SC = CreateObject("Scripting.FileSystemObject"
TRV.Nodes.Add , , "MyComp"
End Sub
Что то с кодировкой, русские буквы не отражает,
переписал.
Номер ответа: 19
Автор ответа:
Patriot
ICQ: 439168318
Вопросов: 5
Ответов: 50
Профиль | | #19
Добавлено: 12.03.07 12:15
Незнаю в скорости с твоим, непроверял, а вот мне нравится всё понятно, с дирами возни столько, система кстати помойму скриптингами то и работает.
Номер ответа: 20
Автор ответа:
HACKER
Разработчик Offline Client
Вопросов: 236
Ответов: 8362
Профиль | | #20
Добавлено: 12.03.07 23:28
2 Patriot
Букофф много? Ты вылитый нетчик, у них там всё в 5 строк
Номер ответа: 21
Автор ответа:
Patriot
ICQ: 439168318
Вопросов: 5
Ответов: 50
Профиль | | #21
Добавлено: 12.03.07 23:33
Номер ответа: 22
Автор ответа:
Patriot
ICQ: 439168318
Вопросов: 5
Ответов: 50
Профиль | | #22
Добавлено: 12.03.07 23:36
Меня кстати попросили написать код поменьше, я его и написал, ты тут самый умный, так вот напиши скриптингом что бы меньше и быстрее было, а мы поучимся, а дерзить мы все умеем
Номер ответа: 23
Автор ответа:
Боцман
ICQ: 295725312
Вопросов: 53
Ответов: 830
Web-сайт:
Профиль | | #23
Добавлено: 13.03.07 11:44
Да что вы в самом деле, нормальных хоть и медленный скрипт. Patriot ты извени тривев я выкинул оставил только два ListBox_са мне так нужнее.
Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
Private Sub Command1_Click()
Find_memory
Form1.Caption = "File-" & List1.ListCount & " Folder-" & List2.ListCount
End Sub
Private Sub Form_Load()
Set SC = CreateObject("Scripting.FileSystemObject"
End Sub
Private Sub Find_memory()
On Error Resume Next
Dim strDrive As String, lngType As Long, I As Byte
strDrive = "C:\Program Files\" ' начальная папка поиска
lngType = GetDriveType(strDrive)
Select Case lngType
Case 3
Find_folder strDrive, strDrive
End Select
End Sub
Private Function Find_folder(PFolder As String, aKey As String)
On Error Resume Next
Set FD = SC.GetFolder(PFolder)
For Each FD In FD.SubFolders
DoEvents
Set FS = SC.GetFolder(FD.Path)
List2.AddItem (FD) ' полный путь к папкам
For Each FS In FS.Files
DoEvents
List1.AddItem (FS.Name) 'FS полный путь
' List2.AddItem (FS) 'Полный путь к файлам
Next
Find_folder FD.Path, "NFold" & Right(FD.Path, 10)
Next
End Function
Номер ответа: 24
Автор ответа:
Patriot
ICQ: 439168318
Вопросов: 5
Ответов: 50
Профиль | | #24
Добавлено: 14.03.07 09:25
Слушай Боцман, а зачем ты используешь Find_memory, если знаешь, что сканить будешь?
Не проше сразу вызвать Find_folder "C:\Program Files\", "ZXC"
Номер ответа: 25
Автор ответа:
Neco
ICQ: 247906854
Вопросов: 133
Ответов: 882
Web-сайт:
Профиль | | #25
Добавлено: 14.03.07 15:36
кстати
вот пример использования класса:
Dim foo As New clsFileWork
foo.FindFile "c:", "*.txt", False
Dim i As Long
For i = 0 To foo.maxFinded
List1.AddItem (foo.GetFinded(i))
Next i
Set foo = Nothing
End Sub
по скорости - рабочий винт, забитый на 48 гиг (70000 файлов, 6500 папок) в первый раз (фактически без использования кэша винта) просканил за минуту. второй раз за 3 секунды.
Номер ответа: 26
Автор ответа:
Programmer
Вопросов: 71
Ответов: 246
Профиль | | #26
Добавлено: 14.03.07 17:15
File1.Path = "C:\Program files"
MsgBox cstr(File1.ListCount) & " файлов в папке C:\Program files"