我正在尝试在 VB 2010 Express (.Net Framework 4.5) 中构建一个简单的例程,该例程从我的夜间数据库备份文件夹中删除旧文件。每当我尝试将 ReadOnly 状态设置为 false(以确保可以删除)或删除文件时,我都会收到“System.ArgumentException:拒绝访问路径”错误。
我已经为此奋斗了两天,并多次重写了代码,但总是得到相同的结果。当我查看指定文件的属性时,一切看起来都很完美。
这是属性的图像。. .
<< WOOPS- 我很想能够在这里发布我的图片以提供帮助,但不可能发布新帖子。希望这种手工打字的努力就足够了。>>
_data {Microsoft.Win32.Win32Native.WIN32_RLE_ATTRIBUTE_DATA}
_datalnitialised 0
Attributes Archive {32}
CreationTime #5/17/20131:57:45 AM*
CreationTimeUtc #5/17/2013 5:57:45 AM#
Directory {C:\powerhome\Database\dbAutoBaks}
DirectoryName "C:\powerhome\Database\dbAutoBaks"
DisplayPath "ph-130517.db"
ERROR_ACCESS_DENIED 5
Exists True
Extension ".db"
FullName "C:\powerhome\Database\dbAutoBaks\ph-130517.db"
FullPath "C:\powerhome\Database\dbAutoBaks\ph-130517.db"
IsReadOnly False
LastAccessTime #5/17/20131:57:45 AM#
这是我的代码。. .
Imports System
Imports System.IO
Imports System.Security.AccessControl
Public Class phFileTrim
Private Sub fileTrim_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim text As String
Dim UserAccount As String = "Administrators"
Dim intdays As Integer = 30
Dim folderPath As String = "C:\powerhome\Database\dbAutoBaks"
Dim fi As IO.FileInfo = New IO.FileInfo(folderPath)
'Check out System.IO.FileInfo Class tutorial
For Each fi In New IO.DirectoryInfo(folderPath).GetFiles("*.*")
Try
fi.IsReadOnly = False
If fi.Exists Then
If (Now - fi.CreationTime).Days > intdays Then fi.Delete()
End If
Catch ex As Exception
text = "File Delete Failed: " & ex.ToString
MsgBox(text)
End Try
Next
Me.Close()
End Sub
End Class
该错误由FileInfo.IsReadOnly = False或FileInfo.Delete() 操作之一触发。
查看变量的调试属性弹出窗口,我发现“fi”似乎是问题所在。定义后对它的所有使用似乎都有 access denied=5 错误。因此怀疑我错误地形成了“Dim fi As IO.FileInfo = New IO.FileInfo(folderPath)”语句。
任何想法将不胜感激。看起来这不应该是火箭科学,但我肯定错过了一些东西。
==星期一早上===
我只是简化了所有内容并将复杂的“Dim fi As IO.FileInfo = New IO.FileInfo(folderPath)”更改为 . . .
Dim fi As New FileInfo("C:\powerhome\Database\dbAutoBaks\ph-130517.db")
这是存在的特定文件的完全限定路径,但是当 fi 被标注时我仍然遇到访问错误。
该文件与 VB 代码位于同一台计算机上,但在调试时遇到此错误。我还没有尝试运行这个程序的可执行文件。执行时它将位于 powerhome 目录中。
== 星期一上午 9 点 === 即使是这个简单的代码也会引发 ACCESS_DENIED 错误 5。(这是来自 MSDN 官方示例库!)
Imports System
Imports System.IO
Public Class Form1
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim path1 As String = Path.GetTempFileName()
Dim finfo As FileInfo = New FileInfo(path1)
End Sub
End Class
我已确保我的 app.manifest 执行级别设置为 . . .
<requestedExecutionLevel level="requireAdministrator" uiAccess="false" />
但仍然没有成功。
到底是什么阻止了我的文件访问?
:-(