I E= T*R
10 .5 Vẽ văn bản và đồ họa lên đối tượng giao diện
11.4 Qui trình điển hình để truy xuất Binary file
q Cú pháp lệnh open file nhị phân như sau :
OpenpathnameFor Binary As filenumber
q Nếu chưa biết cấu trúc dữ liệu của file, nên dùng biến dãy các byte để đọc/ghi dữ liệu từ/ra file nhị phân. Nếu đã biết cấu trúc dữ liệu của file, nên khai báo kiểu dữ liệu miêu tả cấu trúc đó rồi khai báo biến có kiểu vừa định nghĩa để chứa thông tin đọc từ file vào.
q Dùng lệnh Seek[#]filenumber, position để dời pointer đọc/ghi tới vị trí xác định trước khi truy xuất.
q Dùng lệnh Get [#]filenumber, [position], AVariable để đọc dữ liệu từ vị trí position rồi chứa vào biến AVariable. Số byte được đọc = kích thước của biến dữ liệu.
Generated by Foxit PDF Creator © Foxit Software
http://www.foxitsoftware.com For evaluation only.
q Dùng lệnh Put [#]filenumber, [position], AVariable để ghi nội dung của biến AVariable ra file từ vị trí position. Số byte được ghi = kích thước của biến dữ liệu.
q Sau khi đã xử lý xong file, ta dùng lệnh Close [#]filenum để đóng file lại.
Thí dụ truy xuất Binary file
q Mỗi file khả thi (executable) đều có 1 header dài 20h (32) byte với các field như sau : Index Field Diễn giải
0 Magic Chuỗi 2 ký tự magic "MZ" ... ... các field khác chưa cần chú ý
18h Offset Offset tới bảng tái định chương trình stub
Nếu giá trị field Offset (2 byte) ở offset 18h (24) có giá trị là 40h (64) thì file tương ứng là file executable trên Windows (*.exe, *.dll, *.ocx, *.scr, *.drv,...). Còn nếu giá trị Offset < 40h thì file tương ứng là file *.exe chạy trên DOS.
q Dựa vào Header trên, ta thử viết 1 ứng dụng cho phép user chọn đường dẫn của 1 file bất kỳ rồi kiểm tra tính chất của file đó và hiển thị kết quả :
q Không phải file executable q File executable chạy trên DOS
q File executable trên Windows (*.exe, *.dll, *.ocx, *.scr, *.drv,...).
Giao diện đề nghị của thí dụ truy xuất Binary file
Option Explicit
' Thủ tục xử lý sự kiện Click button Private Sub cmdBrowse_Click()
http://www.foxitsoftware.com For evaluation only.
CommonDialog1.ShowOpen ' hiển thị cửa sổ duyệt và chọn file txtFileName.Text = CommonDialog1.FileName
CheckFileClass (txtFileName.Text) End Sub
Private Sub CheckFileClass(strFileName As String) Dim FileNum As Integer
Dim strMagic As String * 2 Dim intOffset As Integer
FileNum = FreeFile ' Tìm chỉ số file chưa dùng và mở file Open strFileName For Binary As FileNum
Get FileNum, 1, strMagic ' đọc 2 chuỗi 2 ký tự magic đầu file If strMagic <> "MZ" Then
txtFileClass.Text = "Khong phai file executable" Exit Sub
End If
Get FileNum, &H19, intOffset ' đọc word Offset tới chương trình Stub If intOffset < &H40 Then
txtFileClass.Text = "File executable tren MSDOS" Else
txtFileClass.Text = "File executable tren Windows (*.exe, *.dll, *.ocx,...)" End If
Close #FileNum End Sub