• Chủ Nhật, 21/12/2003 13:24 (GMT+7)

    Câu hỏi :
    Xin hướng dẫn lập trình VB để kiểm tra sự tồn tại của 1 file bất kỳ trên đĩa và xem thuộc tính (Create, Modified, Accessed ...) của file.

    Trả lời :

    Để kiểm tra sự tồn tại của 1 file (hay thư mục) nào đó trong VB, bạn có thể dùng lệnh Dir(pathname), nếu không có file cần kiểm tra lệnh sẽ trả về chuỗi rỗng. Từ Win98 trở đi, hệ thống cung cấp hàm API GetFileTime() để lấy thông tin ngày giờ tạo file, ngày giờ truy xuất file lần cuối và ngày giờ hiệu chỉnh file lần cuối. Trong chương trình VB, bạn có thể gọi hàm API này của Windows. Thí dụ sau là đoạn code VB để kiểm tra sự tồn tại của 1 file, nếu có thì lấy 3 thông tin ngày giờ của file rồi hiển thị chúng trong 1 message box để người dùng có thể thấy.

     

    Option Explicit

    ‘ Khai báo các hằng dùng với các hàm API

    Private Const OF_READ = &H0

    Private Const OF_SHARE_DENY_NONE = &H40

    Private Const OFS_MAXPATHNAME = 128

    ‘ Khai báo các kiểu dữ liệu được dùng với các hàm API

    Private Type OFSTRUCTREC

         cBytes As Byte

         fFixedDisk As Byte

         nErrCode As Integer

         Reserved1 As Integer

         Reserved2 As Integer

         szPathName(OFS_MAXPATHNAME) As Byte

    End Type

    Private Type FILETIMEREC

         dwLowDateTime As Long

         dwHighDateTime As Long

    End Type

    Private Type SYSTEMTIMEREC

         wYear As Integer

         wMonth As Integer

         wDayOfWeek As Integer

         wDay As Integer

         wHour As Integer

         wMinute As Integer

         wSecond As Integer

         wMilliseconds As Integer

    End Type

    ‘ Khai báo các hàm API cần dùng, nên dùng tiện ích API Viewer

    ‘ để tạo tự động các lệnh khai báo dưới đây để tránh sai sót

    Private Declare Function FileTimeToSystemTime Lib “kernel32” _

         (lpFileTime As FILETIMEREC, lpSystemTime As SYSTEMTIMEREC) As Long

    Private Declare Function GetFileTime Lib “kernel32” (ByVal _

         hFile As Long, lpCreationTime As FILETIMEREC, lpLastAccessTime _

         As FILETIMEREC, lpLastWriteTime As FILETIMEREC) As Long

    Private Declare Function OpenFile Lib “kernel32” (ByVal lpFileName As _

         String, lpReOpenBuff As OFSTRUCTREC, ByVal wStyle As Long) As Long

    Private Declare Function hread Lib “kernel32” Alias “_hread” _

         (ByVal hFile As Long, lpBuffer As Any, ByVal lBytes As Long) As Long

    Private Declare Function lclose Lib “kernel32” Alias “_lclose” (ByVal _

         hFile As Long) As Long

     

    ‘ Hàm xử lý click button FileAttr

    Private Sub FileAttr_Click()

    ‘ Khai  báo các biến cục bộ cần dùng

    Dim sInpFile As String

    Dim hFile As Integer

    Dim FileStruct As OFSTRUCTREC

    Dim iRC As Integer

    Dim CreationTime As FILETIMEREC

    Dim LastAccessTime As FILETIMEREC

    Dim LastWriteTime As FILETIMEREC

    Dim SysCreationTime As SYSTEMTIMEREC

    Dim SysLastAccessTime As SYSTEMTIMEREC

    Dim SysLastWriteTime As SYSTEMTIMEREC

    ‘ Thiết lập pathname của file cần kiểm tra

    sInpFile = “c:\data\gallery.mdb”

    ‘ Kiểm tra sự tồn tại của file

    if Dir(sInpFile) = “” then

       MsgBox “File này không tồn tại”

       Exit Sub

    end if

    ‘ Mở file để lấy handle của nó

    hFile = OpenFile(sInpFile, FileStruct, OF_READ Or OF_SHARE_DENY_NONE)

    If hFile = 0 Then

       MsgBox “Không mở file được”, vbExclamation

       Exit Sub

    End If

    ‘ Lấy thông tin ngày giờ của file

    If GetFileTime(hFile, CreationTime, LastAccessTime, LastWriteTime) Then

       ‘ đổi thông tin ngày giờ ra dạng dễ dùng

       FileTimeToSystemTime CreationTime, SysCreationTime

       FileTimeToSystemTime LastAccessTime, SysLastAccessTime

       FileTimeToSystemTime LastWriteTime, SysLastWriteTime

       ‘ Hiển thị kết quả

       MsgBox (“Creation time : “ & SysCreationTime.wDay & “/” & SysCreationTime.wMonth & “/” & SysCreationTime.wYear & vbLf & _

         “Last acess time : “ & SysLastAccessTime.wDay & “/” & SysLastAccessTime.wMonth & “/” & SysLastAccessTime.wYear & vbLf & _

         “Last modified time : “ & SysLastWriteTime.wDay & “/” & SysLastWriteTime.wMonth & “/” & SysLastWriteTime.wYear)

    End If

    iRC = lclose(hFile)

    End Sub

    Chuyên mục: Lập trình