Как искать файлы в скрытых файлах?

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
goodroman
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 17.01.2004 (Сб) 3:01

Как искать файлы в скрытых файлах?

Сообщение goodroman » 31.01.2004 (Сб) 21:49

Как искать файлы в скрытых файлах? Просьба всякие контролы не предлагать. Меня интересует только чистое API... Как просто искать я знаю. А в скрытых папках мой код не работает. Испотзую функции - FindFirstFile и FindNextFile. Ну и FindClose. Вот мой код:
Public Const MAX_PATH = 260
Public Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Public Type WIN32_FIND_DATA
dwFileAttributes As Long
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * MAX_PATH
cAlternate As String * 14
End Type
Public Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String, lpFindFileData As WIN32_FIND_DATA) As Long
Public Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long, lpFindFileData As WIN32_FIND_DATA) As Long
Public Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long) As Long
Public FUCK() As String ' Массив в который записываются найденные файлы
Public FUCKCount As Integer

Function StripNulls(OriginalStr As String) As String
If (InStr(OriginalStr, Chr(0)) > 0) Then
OriginalStr = Left(OriginalStr, _
InStr(OriginalStr, Chr(0)) - 1)
End If
StripNulls = OriginalStr
End Function


Sub FindFile(Path As String, File As String)
Dim WFD As WIN32_FIND_DATA
Dim FhWnd As Long
Dim PFName As String
Dim PathNames() As String
Dim Cont As Long
Dim ContPath As Integer

FhWnd = FindFirstFile(Path & "*", WFD)
If Not FhWnd = -1 Then
Cont = True
While Cont
If WFD.dwFileAttributes = 16 Then
PFName = StripNulls(WFD.cFileName)
If Not PFName = "." And Not PFName = ".." Then
ContPath = ContPath + 1
ReDim Preserve PathNames(ContPath)
PathNames(ContPath) = Path & PFName & "\"
End If
End If
Cont = FindNextFile(FhWnd, WFD)
Wend
End If
Cont = FindClose(FhWnd)

FhWnd = FindFirstFile(Path & File, WFD)
If Not FhWnd = -1 Then
Cont = True
While Cont
If WFD.dwFileAttributes <> 16 Then
PFName = StripNulls(WFD.cFileName)
If Not PFName = "." And Not PFName = ".." Then
FUCKCount = FUCKCount + 1
ReDim Preserve FUCK(FUCKCount)
FUCK(FUCKCount) = Path & PFName
End If
End If
Cont = FindNextFile(FhWnd, WFD)
Wend
End If
Cont = FindClose(FhWnd)

For i = 1 To ContPath
Call FindFile(PathNames(i), File)
Next i
End Sub

Ilya Vasilyev
Постоялец
Постоялец
 
Сообщения: 820
Зарегистрирован: 06.08.2002 (Вт) 5:36
Откуда: Russia, Omsk

Сообщение Ilya Vasilyev » 04.02.2004 (Ср) 9:53

Искать файлы в скрытых файлах? или папках все же?
Не пробывал задать атрибут Hidden...
А чем ф-ция Dir() не устраивает? такой ограмадный кусок заменяет...
Изображение
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали

hCORe
VB - Экстремал
VB - Экстремал
Аватара пользователя
 
Сообщения: 2332
Зарегистрирован: 22.02.2003 (Сб) 15:21
Откуда: parent directory

Dir() - отстой

Сообщение hCORe » 04.02.2004 (Ср) 11:39

Илья, Dir() раз в пять медленнее работает, чем поиск с Win32 API. Поэтому многие используют именно API...
Моду создают модоки, а распространяют модозвоны.

Ilya Vasilyev
Постоялец
Постоялец
 
Сообщения: 820
Зарегистрирован: 06.08.2002 (Вт) 5:36
Откуда: Russia, Omsk

Сообщение Ilya Vasilyev » 04.02.2004 (Ср) 11:57

hCORe
Это понятно, чел не уточнил этот момент... а может проге надо-то один раз просканить каталог... понятно, если он писал бы менеджер файлов, то...
Изображение
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали

goodroman
Начинающий
Начинающий
 
Сообщения: 3
Зарегистрирован: 17.01.2004 (Сб) 3:01

Спасибо, кто помог.

Сообщение goodroman » 05.02.2004 (Чт) 2:21

Спасибо ребят. Я уже разобрал темняк. Там просто, где свойство файлов, т.е. параметр dwFileAttributes в типе Win32_Find_data (это я про API, кто знает тот поймёт) надо указать нужные значения... Ну типа скрытые или нет, системные там и т.д. (от 16 до 29)
А насчёт, работает быстрее или нет - мне пофиг. Просто выучил два года назад VB и жалею, что не учил C++. Теперь пытаюсь отыграться на API. И пытаюсь кодить чисто на нём... (на API). Теперь, чтоб не тупить, как в прошлый раз, учу асм. А все стандартные элементы - это для лохов... В них нет сути, а лишь для простоты работы для кодеров...

Ilya Vasilyev
Постоялец
Постоялец
 
Сообщения: 820
Зарегистрирован: 06.08.2002 (Вт) 5:36
Откуда: Russia, Omsk

Goodroman

Сообщение Ilya Vasilyev » 05.02.2004 (Чт) 6:30

А все стандартные элементы - это для лохов
Для начинающих :)
Изображение
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали

Vasya
Обычный пользователь
Обычный пользователь
 
Сообщения: 69
Зарегистрирован: 23.04.2002 (Вт) 16:49
Откуда: Togo

Re: Спасибо, кто помог.

Сообщение Vasya » 05.02.2004 (Чт) 6:45

goodroman писал(а): А все стандартные элементы - это для лохов...


Ты текстбокс собственный делаешь, так сказать на чистом апи?

Amed
Алфизик
Алфизик
 
Сообщения: 5346
Зарегистрирован: 09.03.2003 (Вс) 9:26

Re: Goodroman

Сообщение Amed » 05.02.2004 (Чт) 7:00

Ilya Vasilyev писал(а):А все стандартные элементы - это для лохов
Для начинающих :)


Все начинающие = лохи? :evil:

EvilCoder
Посланец джихада
Посланец джихада
Аватара пользователя
 
Сообщения: 706
Зарегистрирован: 25.01.2004 (Вс) 15:08

Сообщение EvilCoder » 05.02.2004 (Чт) 18:44

:arrow: <DELETE> :arrow: 8)
<<------- EvilCoder ------->>


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

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 45

    TopList