我正在尝试在VB 2010 Express(.Net Framework 4.5)中构建一个简单的例程,该例程从我的每晚db备份文件夹中删除旧文件。每当我尝试将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”似乎是个问题。定义后对它的所有使用似乎都有拒绝访问= 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为Dimensioned时,我仍然会收到访问错误。
该文件与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" />
但仍然没有成功。
世界上有什么阻止我的文件访问?
: - (
答案 0 :(得分:1)
问题解决了。
我执行第一个“fi”代码时收到的“ERROR_ACCESS_DENIED 5”属性,根本不是错误。显然,ERROR_ACCESS_DENIED是'fi'对象的属性,就像IsReadOnly一样。 “5”表示“一切都很好”。
当我第一次开始调试我的例程并在我的fi维度上遇到严重错误时,我看到了ACCESS_ERROR并认为这是问题所在。
在接下来的几天调试中,我一直试图摆脱ACCESS_ERROR而不检查我的代码是否真的没问题。
在某个地方,我的代码变得没有错误,我从未发现,直到另一个程序员提出了一些他知道有用的试用代码,我仍然遇到了ACCESS_ERROR。
他指出这不是一个真正的错误,当我尝试我的代码时,它工作得很好(但仍然使用ERROR_ACCESS_DENIED值为5,这没关系)。
我从未在MSDN文档中找到任何指示ACCESS_ERROR值的内容。值5被列在一个文档中,我认为这是一个错误值,显然它不是。