Страница: 1 |
Вопрос: Как найти файл,зная его имя и расширение?
Добавлено: 05.01.10 02:06
Автор вопроса: PROgrammIST | Web-сайт: forum.quotedev.org.ru | ICQ: 403099048
Искал, как можно узнать список запущенных процессов на компе - нашел 2 полезные. В одном исходнике имя файла пишется вместе с его директорией (таких процессов получилось 27), а другой - возвращал только имя файла с расширением (их у меня оказалось 36). Для меня удобнее использовать тот, в котором 36. Ещё, нужно сделать так, чтобы я мог скопировать в папку с исходником этот файл, а как это сделать без полного пути я незнаю (по-моему это вообще невозможно). Так как можно найти файл?
P.S.: проверял количество всех процессов в одно время
Ответить
Номер ответа: 6Автор ответа: Саня
ICQ: 553816426 Вопросов: 10Ответов: 99
Профиль | | #6
Добавлено: 05.01.10 23:58
Добавь к проэкту модуль
вот код модуля:
Option Explicit
Private Declare Function FindFirstFile Lib "kernel32" Alias "FindFirstFileA" (ByVal lpFileName As String , lpFindFileData As WIN32_FIND_DATA) As Long
Private Declare Function FindClose Lib "kernel32" (ByVal hFindFile As Long ) As Long
Private Declare Function FindNextFile Lib "kernel32" Alias "FindNextFileA" (ByVal hFindFile As Long , lpFindFileData As WIN32_FIND_DATA) As Long
Public Enum AtributConst
FILE_ATTRIBUTE_ARCHIVE = &H20
FILE_ATTRIBUTE_COMPRESSED = &H800
FILE_ATTRIBUTE_DIRECTORY = &H10
FILE_ATTRIBUTE_HIDDEN = &H2
FILE_ATTRIBUTE_NORMAL = &H80
FILE_ATTRIBUTE_READONLY = &H1
FILE_ATTRIBUTE_SYSTEM = &H4
FILE_ATTRIBUTE_TEMPORARY = &H100
End Enum
Public Type FILETIME
dwLowDateTime As Long
dwHighDateTime As Long
End Type
Public Type WIN32_FIND_DATA
dwFileAttributes As AtributConst
ftCreationTime As FILETIME
ftLastAccessTime As FILETIME
ftLastWriteTime As FILETIME
nFileSizeHigh As Long
nFileSizeLow As Long
dwReserved0 As Long
dwReserved1 As Long
cFileName As String * 260
cAlternate As String * 14
End Type
Private Const INVALID_HANDLE_VALUE = -1
Public Function StartFind(ByVal sFilter As String , ByRef FindArray() As WIN32_FIND_DATA)
Dim lngHandle As Long
Dim TempData As WIN32_FIND_DATA
lngHandle = FindFirstFile(sFilter & Chr(0), TempData)
If lngHandle = INVALID_HANDLE_VALUE Then Exit Function
ReDim FindArray(0)
FindArray(0) = TempData
Do Until FindNextFile(lngHandle, TempData) = 0
DoEvents
ReDim Preserve FindArray(UBound(FindArray) + 1)
FindArray(UBound(FindArray)) = TempData
Loop
Call FindClose(lngHandle)
End Function
Public Sub ScanForFiles(StartPath As String , Pattern As String , Files() As String )
Dim I As Long , Dir1() As String , File1() As String , File As Long
File = UboundS(Files())
File = File + 1
If Mid(StartPath, Len(StartPath), 1) = "\" Then
Else
StartPath = StartPath + "\"
End If
DirBoxEmu StartPath, Dir1()
FileBoxEmu StartPath, Pattern, File1()
For I = 0 To UboundS(File1())
DoEvents
ReDim Preserve Files(I + File)
Files(I + File) = StartPath + File1(I)
Next
For I = 0 To UboundS(Dir1())
DoEvents
ScanForFiles StartPath + Dir1(I), Pattern, Files()
Next
End Sub
Private Sub DirBoxEmu(Path As String , Dirs() As String )
Dim Data() As WIN32_FIND_DATA, I As Long , Counter As Long , TempName As String
Counter = -1
Erase Dirs()
If Mid(Path, Len(Path), 1) = "\" Then
Else
Path = Path + "\"
End If
Erase Data()
StartFind Path + "*" , Data()
For I = 0 To UboundFind(Data())
DoEvents
TempName = Left(Data(I).cFileName, InStr(1, Data(I).cFileName, Chr(0)) - 1)
If TempName <> "." And TempName <> ".." Then
If GetEntryType(Data(I).dwFileAttributes) = 1 Then
Counter = Counter + 1
ReDim Preserve Dirs(Counter)
Dirs(Counter) = TempName
End If
End If
Next
End Sub
Private Sub FileBoxEmu(Path As String , Filter As String , Files() As String )
Dim Data() As WIN32_FIND_DATA, Repeat As Long , I As Long , j As Long , Counter As Long , Filters() As String , TempName As String
Counter = -1
Erase Files()
Erase Filters()
If Mid(Path, Len(Path), 1) = "\" Then
Else
Path = Path + "\"
End If
Filters() = Split(Filter, ";" )
Counter = UboundS(Filters())
If Counter = -1 Then
Repeat = 0
ReDim Filters(0)
Filters(0) = "*"
Else
Repeat = Counter
End If
Counter = -1
For j = 0 To Repeat
DoEvents
Erase Data()
StartFind Path + Filters(j), Data()
For I = 0 To UboundFind(Data())
DoEvents
TempName = Left(Data(I).cFileName, InStr(1, Data(I).cFileName, Chr(0)) - 1)
If TempName <> "." And TempName <> ".." Then
If GetEntryType(Data(I).dwFileAttributes) = 0 Then
Counter = Counter + 1
ReDim Preserve Files(Counter)
Files(Counter) = TempName
End If
End If
Next
Next
End Sub
Private Function GetEntryType(dwAttributes As Long ) As Long
GetEntryType = 0
If (dwAttributes And &H10) = &H10 Then
GetEntryType = 1
Else
GetEntryType = 0
End If
End Function
Public Function UboundFind(Data() As WIN32_FIND_DATA) As Long
On Error GoTo Handler:
UboundFind = UBound(Data())
Exit Function
Handler:
UboundFind = -1
End Function
Public Function UboundS(Data() As String ) As Long
On Error GoTo Handler:
UboundS = UBound(Data())
Exit Function
Handler:
UboundS = -1
End Function
поиск файлов производишь так:
Dim a() As String
ScanForFiles "здесь имя дискак" , "здесь имя файла для поиска или маска" , a() переменная а() будет масивом результата поиска каждый элемент масива полный путь к найденому файлу.
Ответить
Страница: 1 |
Поиск по форуму