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


2025年8月29日 星期五

ASP.NET System.Threading.ThreadAbortException: 執行緒已經中止

 參考引用來源:ASP.NET System.Threading.ThreadAbortException: 執行緒已經中止
---

發生錯誤:執行緒已經中止。     

於 System.Threading.Thread.AbortInternal()

於 System.Threading.Thread.Abort(Object stateInfo)

於 System.Web.HttpResponse.AbortCurrentThread()

於 System.Web.HttpResponse.Redirect(String url, Boolean endResponse, Boolean permanent)

---


解決方案:https://support.microsoft.com/zh-tw/kb/918181

<%@ Page Language="C#" Async="true"%>


當 HttpResponse.Redirect 方法 endResponse 參數不設為 false 時,就會發生這個問題。 根據預設值,endResponse 參數設定為 true。



轉貼連結:http://www.dotblogs.com.tw/boei/archive/2010/07/11/16485.aspx

將網頁轉出成word的時候,最後會來個Response.End()來結束它的輸出,但都會發生<System.Threading.ThreadAbortException> 執行緒已經中止,雖然不會造成系統上的什麼問題。

解決方法:

1.    繼續用Response.End(),外面用try – catch包住,但try – catch會比較消耗資源,所以不考慮。

2.    改用HttpContext.Current.ApplicationInstance.CompleteRequest(),可以跳過Application_EndRequest 事件的執行。

 

如果使用Response.Redirect 或 Server.Transfer 方法也發生一樣狀況的話,就可以使用Response.Redirect(String url, bool endResponse),endResponse就設為False,因為Response.Redirect內部會用到Response.End(),設為False就是要停用Response.End()方法。