TheString
Abc
TheString
Abc
Function FilesIdentical(FILE1 as string, FILE2 as string) as boolean
Open FILE1 for binary as #1
Open FILE2 for binary as #2
if lof(1)<>lof(2) then: filesidenctical=false: exit function
s1$=space$(lof(1))
s2$=space$(lof(2))
get #1,,s1$
get #2,,s2$
if s1$<>s2$ then filesidentical=false else filesidentical=true
end function
F2 писал(а):
- Код: Выделить всё
Function Space$(Number As Long ) As String
Shell "fc /b C:\File1.ext D:\File2.ext > compare.txt"
Ennor писал(а):
- Код: Выделить всё
Shell "fc /b C:\File1.ext D:\File2.ext > compare.txt"
Ennor писал(а):
- Код: Выделить всё
Shell "fc /b C:\File1.ext D:\File2.ext > compare.txt"
SHURUP писал(а):Пробовал сравнить два фильма - ничего не вышло, выдало обибку. "R-T-E 14: Out of string space"
Andrey Fedorov писал(а):А нефиг весь фильм (точнее два) пытаться сразу в память запихнуть!
Кусочками сравнивай.
Ennor писал(а):Это программа File Compare из состава операционной системы. Сомневаюсь, что получится на VB написать что-то более быстрое, чем она.
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
dimix писал(а):Дык, об этом и речь - как правильно кусочками сделать?
dimix писал(а):а ежели все-таки на VB (предполагается, что будут сравниваться файлы метров по 5 и отличия будут проявляться не позднее первого метра).
Andrey Fedorov писал(а):Я сравниваю весь файл, а если отличия достаточно проверять только в его начале, то добавить в функцию параметр, указывающий сколько байт надо проверять - это уже сам сделаешь, оно несложно...
Public Function CompFiles(sFile1 As String, sFile2 As String, Optional iLenCmp As Long = 0) 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
If iLenCmp > 0 And iLenCmp < k Then k = iLenCmp
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
Andrey Fedorov писал(а):Ennor писал(а):Это программа File Compare из состава операционной системы. Сомневаюсь, что получится на VB написать что-то более быстрое, чем она.
Зря сомневаешься, вообще-то.
Откомпили приведенный код в Native-code (предварительно заменив в нем имена файлов на свои) и сравни его быстродействие с тем-же fc.exe.
[/syntax]
alibek писал(а):Некорректно сравнивать. FC умеет не только сравнивать два файла на предмет того, одинаковы они или нет. Она показывает отличия, а это куда сложнее.
test1
test2
test3
test4
test5
test6
test7
test2-1
test2-2
test2-3
test2-4
test2-5
test1
test2
test3
test4
test6
test7
test2-1
test2-2
test2-3
test2-4
test2-5
***** test1
test4
test5
test6
***** TEST2
test4
test6
*****
***** test1
test2-3
test2-4
***** TEST2
test2-3
test2-4
*****
alibek писал(а):Ты видимо не пользовался FC
Я не вижу в твоей программе кода, который бы вновь находил общие фрагменты после того, как отобразит отличия.
Сейчас этот форум просматривают: Yandex-бот и гости: 137