Уважаемый Andrey Fedorov приводил код сравнивающий два файла:
- Код: Выделить всё
Public Sub Main()
Dim t As Double, b As Boolean
t = Timer
b = CompFiles("C:\Temp\C1.exe", "C:\Temp\C2.exe")
MsgBox b & " Time = " & Format$(Timer - t, "0.0000") & ""
End Sub
Public Function CompFiles(sFile1 As String, sFile2 As String) As Boolean
Const iStep As Long = 32768
Dim iHFile1 As String, iHFile2 As String
Dim m1() As Byte, m2() As Byte, k As Long, j As Long, i As Long
j = iStep - 1
ReDim m1(j): ReDim m2(j)
On Error GoTo Err_
iHFile1 = FreeFile
Open sFile1 For Binary Access Read As #iHFile1
iHFile2 = FreeFile
Open sFile2 For Binary Access Read As #iHFile2
k = LOF(iHFile1)
If k = LOF(iHFile2) Then
Do While k > 0
j = IIf(k > iStep, iStep, k)
Get #iHFile1, , m1
Get #iHFile2, , m2
For i = 0 To j - 1
If m1(i) <> m2(i) Then
Exit For
End If
Next
If i < j Then Exit Do
k = k - iStep
Loop
CompFiles = (k <= 0)
End If
Err_:
If Err.Number Then MsgBox Err.Description
On Error Resume Next
If iHFile1 Then Close #iHFile1
If iHFile2 Then Close #iHFile2
End Function
Вопрос про организацию обработчика ошибок в нем.
Если файл не существует, то Open sFile1 For Binary Access Read As #iHFile1 генерирует ошибку и программа переходит на метку Err_:
Далее идет инструкция On Error Resume Next, которая должна пропускать все последующие ошибки. Но у меня все равно возникает run time error, и программа завершается. То есть on error resume next не срабатывает. И пользователь получает два сообщения об ошибке, вместо одного сообщения и "тихого" закрытия файлов.
- Код: Выделить всё
Err_:
If Err.Number Then MsgBox Err.Description
On Error Resume Next
If iHFile1 Then Close #iHFile1
If iHFile2 Then Close #iHFile2
msgbox "Если sFile1 не существует, этот код не выполнится"
End Function
Скажите, пожалуйста, можно использовать on error resume next в обработчике ошибок?
Или я что-то совсем не так понял в логике работы