View Full Version : فانكشن مربوط به مقايسه دو فايل
m_zi
سه شنبه 22 مرداد 1387, 15:35 عصر
سلام
من دنبال تابعي هستم كه بتونه دو فايل را با هم مقايسه كنه .
مشه راهنمايي كنيد .
ممنون
sohrab o
سه شنبه 22 مرداد 1387, 15:49 عصر
چه نوع مقایسه ای؟
تاریخ ساخت ؟ سایر فایل ؟ تعداد رکورد ؟ نوع رکورد ؟
scarce
سه شنبه 22 مرداد 1387, 17:54 عصر
منظورتون از نظر سایز فایل یا نوع پسوند؟
vbhamed
سه شنبه 22 مرداد 1387, 19:50 عصر
سلام
اگر مقايسه بايت به بايت مورد نظر باشه بايد از فايلهاي باينري استفاده كنيد و كاراكتر به كاراكتر از فايلها بخونيد و مقايسه كنيد
m_zi
چهارشنبه 23 مرداد 1387, 08:04 صبح
با سلام
هم سايز فايل و هم محتواي فايل .
ممنون
scarce
چهارشنبه 23 مرداد 1387, 08:23 صبح
برای مقایسه سایز فایل می تونید اول سایز فایل رو با دستور FileLen(FilePath) بگیرید و بعد مقایسه را با عملگر ها ( < > = <= >= و ...) انجام دهید . در مورد سوال دوم باید فایل را به صورت باینری باز کنید و بایت به یابت مقایسه رو انجام بدید که اینو دوست عزیزم vbahmad جواب داده بودن . برای باز کردن فایل به صورت باینری می تونید به این شکل عمل کنید.
Open FilePath For Binary as #1
Dim Data as String
Data = Spcae(FileLen(FilePath))
Get #1, 1, Data
DoEvents
Close #1
xxxxx_xxxxx
چهارشنبه 23 مرداد 1387, 11:39 صبح
با اين تابع مي تونيد دو فايل رو به صورت دقيق مقايسه كنيد.
Private Declare Function FormatMessage Lib "kernel32" Alias "FormatMessageA" (ByVal dwFlags As Long, lpSource As Any, ByVal dwMessageId As Long, ByVal dwLanguageId As Long, ByVal lpBuffer As String, ByVal nSize As Long, Arguments As Long) As Long
Private Const FORMAT_MESSAGE_ALLOCATE_BUFFER = &H100
Private Sub Command1_Click()
Open "D:\a.exe" For Binary As #1
Open "D:\b.exe" For Binary As #2
issame% = True
If LOF(1) <> LOF(2) Then
issame% = False
Else
whole& = LOF(1) \ 10000 'number of whole 10,000 byte chunks
part& = LOF(1) Mod 10000 'remaining bytes at end of file
buffer1$ = String$(10000, 0)
buffer2$ = String$(10000, 0)
start& = 1
For x& = 1 To whole& 'this for-next loop will get 10,000
Get #1, start&, buffer1$ 'byte chunks at a time.
Get #2, start&, buffer2$
If buffer1$ <> buffer2$ Then
issame% = False
Exit For
End If
start& = start& + 10000
Next
buffer1$ = String$(part&, 0)
buffer2$ = String$(part&, 0)
Get #1, start&, buffer1$ 'get the remaining bytes at the end
Get #2, start&, buffer2$ 'get the remaining bytes at the end
If buffer1$ <> buffer2$ Then issame% = False
End If
Close
If issame% Then
MsgBox "Files are identical", 64, "Info"
Else
MsgBox "Files are NOT identical", 16, "Info"
End If
End Sub
موفق باشيد.
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.