vb.net 的文件删除异常



我的 VB.NET 垃圾清理器无法删除aria-Debug-10144.log因为它被另一个进程使用。

我试过这个:

Imports System.Collections.ObjectModel
Imports System.IO
Public Class Form1
Dim TempDirs As ReadOnlyCollection(Of String)
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
TempDirs = (My.Computer.FileSystem.GetDirectories("C:UsersAitorAppDataLocalTemp"))
Dim ListDirs As List(Of String) = TempDirs.ToList
Dim directoryName As String = "C:UsersAitorAppDataLocalTemp"
For Each deleteFile In Directory.GetFiles(directoryName, "*.*", SearchOption.TopDirectoryOnly)
If Not deleteFile.ToString = "aria-Debug-10144.log" Then
File.Delete(deleteFile)
End If
Next
MsgBox("Clean completed!", MsgBoxStyle.OkOnly + MsgBoxStyle.Information, "Results")
End Sub
End Class

但它仍然试图这样做。

有人可以帮助我吗?

有两个原因:

首先,所选文件被另一个程序占用。在这种情况下,您需要在删除所选文件之前确定它是否被占用。这里有一个小例子。

Imports System.Runtime.InteropServices
Public Class Form1
<DllImport("kernel32.dll")>
Public Shared Function _lopen(ByVal lpPathName As String, ByVal iReadWrite As Integer) As IntPtr
End Function
<DllImport("kernel32.dll")>
Public Shared Function CloseHandle(ByVal hObject As IntPtr) As Boolean
End Function
Public Const OF_READWRITE As Integer = 2
Public Const OF_SHARE_DENY_NONE As Integer = &H40
Public Shared ReadOnly HFILE_ERROR As IntPtr = New IntPtr(-1)
Public Shared Function IsFileOccupied(ByVal filePath As String) As Boolean
Dim vHandle As IntPtr = _lopen(filePath, OF_READWRITE Or OF_SHARE_DENY_NONE)
CloseHandle(vHandle)
Return If(vHandle = HFILE_ERROR, True, False)
End Function

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
If (IsFileOccupied("C:UsersjuliexAppDataLocalTemparia-debug-13836.log")) Then
MessageBox.Show("File is already occupied")
Else
MessageBox.Show("File is not occupied")
'Then do some delete operation.
End If
End Sub
End Class

其次,所选文件是临时文件,当前已锁定。如果要清除它拥有的临时文件,则需要完全控制才能解锁这些文件,然后删除它们! 如果要删除 TEMP 文件,无论该文件是应用程序还是其他所有者拥有,都应非常小心。原始应用程序可能已应用锁,因为它想要使用该文件! 此时,您可以参考以下链接:

1.如何解锁被 .NET 中的进程锁定的文件

2.https://social.msdn.microsoft.com/Forums/vstudio/en-US/9e2044c5-ae5d-4552-a335-01cc567dfc58/how-to-unlock-a-file-used-by-other-process?forum=csharpgeneral

最新更新