2025年9月17日 星期三

VB.NET 檔案是否被鎖定

 參考引用:VB.NET 檔案是否被鎖定

--

Try                

    Dim fs AsFileStream = NewFileStream(excelFileName, FileMode.OpenOrCreate, FileAccess.Read)

              fs.Close()

Catch ex AsException

     MessageBox.Show(excelFileName & "文件当前已经打开,请先关闭")            

     Return   '  退出        

End  Try


----


Imports System.IO

Imports System.Runtime.InteropServices


Public Class Form1


    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

        Dim str_thispath As String = String.Empty '完整檔案路徑

        str_thispath = TextBox1.Text

        TextBox2.Text = ""

        If File.Exists(str_thispath) Then

            IsFileOpen(str_thispath)

        Else

            TextBox2.Text = "檔案不存在:" & Date.Now.ToString("yyyy/MM/dd HH:mm:ss.fffffff") & " 結束執行。" & vbNewLine & TextBox2.Text

        End If

        TextBox2.Text = "系統於 " & Date.Now.ToString("yyyy/MM/dd HH:mm:ss.fffffff") & " 結束執行。" & vbNewLine & TextBox2.Text

    End Sub


    Function IsFileOpen(ByVal str_thispath As String) As Boolean

        Dim stream As FileStream = Nothing

        Try

            stream = File.Open(str_thispath, FileMode.Open, FileAccess.ReadWrite, FileShare.None)

            stream.Close()

            TextBox2.Text = "檔案可開啟:" & Date.Now.ToString("yyyy/MM/dd HH:mm:ss.fffffff") & " " & vbNewLine & TextBox2.Text

        Catch ex As Exception


            If TypeOf ex Is IOException AndAlso IsFileLocked(ex) Then

                TextBox2.Text = "發生例外錯誤:原因可能檔案正在使用中已上鎖..." & Date.Now.ToString("yyyy/MM/dd HH:mm:ss.fffffff") & " " & vbNewLine & TextBox2.Text

                Return True

            End If

        End Try

        Return False

    End Function


    Function IsFileLocked(exception As Exception) As Boolean

        Dim ERROR_SHARING_VIOLATION As Integer = 32, ERROR_LOCK_VIOLATION As Integer = 33

        Dim errorCode As Integer = Marshal.GetHRForException(exception) And ((1 << 16) - 1)

        Return errorCode = ERROR_SHARING_VIOLATION OrElse errorCode = ERROR_LOCK_VIOLATION

    End Function


End Class

2025年9月1日 星期一

vb ping get domain

 Imports System.Net.NetworkInformation


Public Class Form1


    Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click

        Dim url As String = "https://xxx/xxx/xxxx"

        Dim utl_Donaim = GetDomainFromUrl(url)

        'If My.Computer.Network.Ping("198.01.01.01") Then

        'End If

        Using pinger As New Ping()

            Dim reply As PingReply = pinger.Send(utl_Donaim, 5000)

            If reply.Status = IPStatus.Success Then

                MessageBox.Show("Ping to {targetHost} successful! Roundtrip time: {reply.RoundtripTime}ms", "Ping Result")

            Else

                MessageBox.Show("Ping to {targetHost} failed. Status: {reply.Status}", "Ping Result")

            End If

        End Using



    End Sub


    Public Function GetDomainFromUrl(ByVal urlString As String) As String

        Try

            Dim uri As New Uri(urlString)

            Return uri.Host

        Catch ex As UriFormatException

            Return String.Empty

        End Try

    End Function