Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 | 2 |

 

  Вопрос: Список всех файлов Добавлено: 11.03.07 16:34  

Автор вопроса:  DaaGER | Web-сайт: smartic.ru | ICQ: 329195567 

Ответить

  Ответы Всего ответов: 26  

Номер ответа: 16
Автор ответа:
 Patriot



ICQ: 439168318 

Вопросов: 5
Ответов: 50
 Профиль | | #16 Добавлено: 12.03.07 00:14
Зачит Боцман облом тебе пользуйся своим или тут выложели просто шедевр, Neco постарался

И кстати мне интерестно что у тебя там за среда такая, и наверное в системе нету scrrun.dll, вроде такого быть неможет

Ответить

Номер ответа: 17
Автор ответа:
 Боцман



ICQ: 295725312 

Вопросов: 53
Ответов: 830
 Web-сайт: Rus-Skipper.narod.ru
 Профиль | | #17
Добавлено: 12.03.07 10:34
Извени, среда была алкогольная.
Для вывода списка файлов в небольших папках твой код пойдет, а на счет дисков может у меня такой комп, но я ждать не рискнул. Тот который я приводил за 4 секунды сканирует весь диск С, он у меня всего 3,5 Гб, а твоим я 10 секунд сканировал
C:\Program Files\, там к стати нет не одной установленной программы, кроме FARа.
вот как я использовал твой пример, но как всегда 2 ListBox_са добавить.
Dim SC As Object, FD As Object, FS As Object
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-сайт: Rus-Skipper.narod.ru
 Профиль | | #18
Добавлено: 12.03.07 10:44
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";)
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-сайт: Rus-Skipper.narod.ru
 Профиль | | #23
Добавлено: 13.03.07 11:44
Да что вы в самом деле, нормальных хоть и медленный скрипт. Patriot ты извени тривев я выкинул оставил только два ListBox_са мне так нужнее.
 
Dim SC As Object, FD As Object, FS As Object
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-сайт: neco.pisem.net
 Профиль | | #25
Добавлено: 14.03.07 15:36
кстати
вот пример использования класса:
Private Sub Form_Load()
    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"

Ответить

Страница: 1 | 2 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам