---
2025年9月23日 星期二
2025年9月19日 星期五
2025年9月18日 星期四
2025年9月17日 星期三
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()方法。