Разница во времени при файлах больше 1 мегабайта уже ощутима, да и крякозябры пофигу
- Private Const GMEM_MOVEABLE As Long = 0
- Private Const GMEM_FIXED = &H0
- Private Declare Function GlobalFree Lib "kernel32.dll" (ByVal hMem As Long) As Long
- Private Declare Function GlobalAlloc Lib "kernel32.dll" (ByVal wFlags As Long, ByVal dwBytes As Long) As Long
- Private Const FILE_BEGIN = 0
- Private Const GENERIC_READ As Long = &H80000000
- Private Const GENERIC_WRITE As Long = &H40000000
- Private Const CREATE_ALWAYS As Long = 2
- Private Const open_existing As Long = 3
- Private Const FILE_FLAG_SEQUENTIAL_SCAN As Long = &H8000000
- Private Declare Function CreateFile Lib "kernel32.dll" Alias "CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByRef lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) As Long
- Private Declare Function SetFilePointer Lib "kernel32.dll" (ByVal hFile As Long, ByVal lDistanceToMove As Long, ByVal lpDistanceToMoveHigh As Long, ByVal dwMoveMethod As Long) As Long
- Private Declare Function WriteFile Lib "kernel32" (ByVal hFile As Long, lpBuffer As Any, ByVal nNumberOfBytesToWrite As Long, lpNumberOfBytesWritten As Long, ByVal lpOverlapped As Long) As Long
- Private Declare Function ReadFile Lib "kernel32.dll" (ByVal hFile As Long, ByRef lpBuffer As Any, ByVal nNumberOfBytesToRead As Long, ByRef lpNumberOfBytesRead As Long, ByVal lpOverlapped As Long) As Long
- Private Declare Function CloseHandle Lib "kernel32.dll" (ByVal hObject As Long) As Long
- Private Declare Function CreateStreamOnHGlobal Lib "ole32" (ByVal hMem&, ByVal DeleteOnRelease&, pStream As IUnknown) As Long
- Private Declare Function GlobalLock Lib "kernel32" (ByVal hMem As Long) As Long
- Private Declare Function GlobalUnlock Lib "kernel32" (ByVal hMem As Long) As Long
- Private Declare Function OleLoadPicture Lib "olepro32" (pStream As Any, ByVal lSize As Long, ByVal fRunmode As Long, riid As Any, ppvObj As Any) As Long
- Private Declare Function CLSIDFromString Lib "ole32" (ByVal lpsz As Any, pclsid As Any) As Long
- Private Declare Function GetTickCount Lib "kernel32" () As Long
- Private Declare Function GetFileSizeEx Lib "kernel32" (ByVal hFile As Long, lpFileSize As Currency) As Boolean
-
- Const IID_IPicture = "{7BF80980-BF32-101A-8BBB-00AA00300CAB}"
- Const file_share_read = &H1
- Const file_share_write = &H2
- Dim filename As String, findString As String
-
- Private Sub Form_Load()
- filename = "d:\123.txt"
- findString = "Arvitaly"
- End Sub
-
- Private Sub command1_Click()
- Dim s As String
- Dim t As Long
- t = GetTickCount
- Open filename For Input As #1
- Do Until EOF(1)
- Line Input #1, s
- If InStr(1, s, findString) > 0 Then Print (("Àäðåñ íàéäåí!")), vbExclamation: Exit Do
- Loop
- Close #1
- MsgBox "Ïðîøëî " & (GetTickCount - t) & "ìèëëèñåêóíä"
- End Sub
-
- Private Sub command2_Click()
- Dim nSize As Currency, hget As Double, mAdress As Long, str As String * 64000, ar As Long, pos As Currency, iff As Long
- Dim t As Long
- t = GetTickCount
- hget = CreateFile(filename, GENERIC_READ, file_share_read Or file_share_write, ByVal 0&, open_existing, 0, 0)
- If hget < 1 Then MsgBox "Íå óäàëîñü ïîëó÷èòü äîñòóï ê ôàéëó": Exit Sub
- GetFileSizeEx hget, nSize
- If nSize < 1 Then MsgBox "Ôàéë íóëåâîãî ðàçìåðà, ÷å òàì èñêàòü òî": Exit Sub
- mAdress = GlobalAlloc(GMEM_FIXED, 64001)
- If mAdress < 1 Then MsgBox "Íå óäàëîñü âûäåëèòü ïàìÿòü": Exit Sub
- str = mAdress
- Do While pos < (nSize * 10000) + 64000
- ar = SetFilePointer(hget, pos, 0, FILE_BEGIN)
- If ar <> pos Then MsgBox "Íå íàéäåíà ïîçèöèÿ â ôàéëå": Exit Sub
- ar = ReadFile(hget, ByVal str, 64000, 0, 0)
- If ar <> 1 Then MsgBox "Íå óäàëîñü ïðî÷èòàòü èç ôàéëà": Exit Sub
- iff = InStr(1, str, findString)
- If iff > 0 Then Print (("Àäðåñ íàéäåí íà ïîçèöèè " & iff + pos)), vbExclamation: Exit Do
- pos = pos + 64000
- Loop
- CloseHandle (hget)
- MsgBox "Ïðîøëî " & (GetTickCount - t) & "ìèëëèñåêóíä"
- End Sub
Ответить
|