Xác định file tồn tại (File exists) trên mạng LAN bị chậm

Chia sẻ bởi:hands
★★★★★
Quảng cáo

Chào các bác, các anh chị!
Em vừa viết code liên quan đến lấy hình ảnh trên một máy khác trong mạng Lan (mạng nội bộ công ty), phần lấy hình ảnh thì em không đề cập vào đây, chỉ có vấn đề ở chỗ xác định file đó tồn tại hay không thì có vấn đề thế này:
– Nếu là máy cần lấy ảnh (trong mạng nội bộ) đang mở thì mọi việc diễn ra suôn sẻ
– Nếu máy đó đã tắt, tức không kết nối được thì code xác định file tồn tại hay không lại xử lý quá lâu
Chạy lần đầu tới 43 giây, lần sau không hiểu nó có nhớ gì hay không nhưng chạy nhanh hơn
Trong code xác định sự tồn tại của file thì em tìm hiểu có 3 kiểu: dùng Dir, FSO hoặc API. Vì dùng Dir không áp dụng cho đường dẫn tiếng Việt nên em không nghiên cứu gì thêm nó
Nói thêm là đường dẫn phải là một máy có thật trên mạng LAN thì nó mới lâu, còn lấy đường dẫn giả thì nó cũng vài giây thôi
Câu hỏi của em là: Có cách nào xử lý vấn đề này cho nó nhanh hơn không? Tầm 1,2 giây gì đó thì trong khoảng chấp nhận được chứ 43 giây thì quá lớn

Private Declare Function GetFileAttributesW Lib "kernel32.dll" (ByVal lpFileName As Long) As Long

Public Function FileExistsAPI(ByRef sFileName As String) As Boolean
    Select Case (GetFileAttributesW(StrPtr(sFileName)) And vbDirectory) = 0&
    Case True
        FileExists = True
    Case Else
        FileExists = False
    End Select
End Function
Function FileExistsFSO(ByVal filename As String) As Boolean
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    FileExistsFSO = fso.FileExists(filename)
    Set fso = Nothing
End Function
Sub a()
Dim xpath As String, t As Double
t = Timer
xpath = "\plan101234.jpg"
MsgBox "FileExistsAPI : " & FileExistsAPI(xpath) _
        & vbCrLf & "Time : " & Timer - t
t = Timer
'MsgBox "FileExistsFSO : " & FileExistsFSO(xpath) _
        & vbCrLf & "Time : " & Timer - t
End Sub

2803

Bạn phải tách dường dẫn để lấy IP hoặc tên máy kết nối tới sau đó dùng Ping để xem nó có tắt/mở trước rồi mới kiểm tra tới file có tồn tại hay không.

www.giaiphapexcel.com/diendan/threads/x%C3%A1c-%C4%91%E1%BB%8Bnh-file-t%E1%BB%93n-t%E1%BA%A1i-file-exists-tr%C3%AAn-m%E1%BA%A1ng-lan-b%E1%BB%8B-ch%E1%BA%ADm.160870/

Khóa học Power PI – Ứng dung trong Nhân sự
Khóa học SprinGO phù hợp

Khóa học Power PI – Ứng dung trong Nhân sự

TỔNG QUAN KHÓA HỌC: POWER BI CHO NGÀNH NHÂN SỰ Khóa học Power BI cho Nhân sự được thiết kế dành riêng cho các...

Xem khóa học
★★★★★ 5 ★ 1 👤 1 ▥ 0
Quảng cáo

Bạn nên đọc

One Response

  1. hands says:
    Option Explicit
    Function PingIP(ByVal IP As String) As Boolean
        Dim objWMIService, colItems, objItem
        Set objWMIService = GetObject("winmgmts:\.rootcimv2")
        Set colItems = objWMIService.ExecQuery("Select * from Win32_PingStatus Where timeout = 1000 and Address='" & IP & "'")
        For Each objItem In colItems
            If objItem.StatusCode = 0 Then
                PingIP = True
            Else
                PingIP = False
            End If
        Next objItem
    End Function
    
    Sub testPingIP()
        Dim bl As Boolean
        Const SeverName As String = "192.168.252.99"
        bl = PingIP(SeverName)
        If bl = True Then
            'lam gi do
        End If
    End Sub

    [QUOTE="Ngày mai trời lại sáng, post: 0, member: 0"]
    Bác

Leave a Reply

Your email address will not be published. Required fields are marked *

Quảng cáo

Cũ vẫn chất

Xem thêm