在处理VB.NET4.5中的文件之前,测试我是否具有完全的读/写权限

在处理VB.NET4.5中的文件之前,测试我是否具有完全的读/写权限,vb.net,.net-4.5,vb.net-2010,Vb.net,.net 4.5,Vb.net 2010,我正在编写一个作为本地系统帐户运行的windows服务。我试图确定我是否有对文件的完全读/写访问权,并开始进一步处理它。这是我的密码: Dim FullPath As String FullPath = "C:\directory\file.txt" Dim ps As Security.PermissionSet ps = New Security.PermissionSet(Security.Permissions.PermissionState.Unrest

我正在编写一个作为本地系统帐户运行的windows服务。我试图确定我是否有对文件的完全读/写访问权,并开始进一步处理它。这是我的密码:

    Dim FullPath As String
    FullPath = "C:\directory\file.txt"
    Dim ps As Security.PermissionSet
    ps = New Security.PermissionSet(Security.Permissions.PermissionState.Unrestricted)
    ps.AddPermission(New Security.Permissions.FileIOPermission(Security.Permissions.FileIOPermissionAccess.AllAccess, FullPath))
    ps.AddPermission(New Security.Permissions.FileIOPermission(Security.Permissions.FileIOPermissionAccess.AllAccess, IO.Path.GetDirectoryName(FullPath)))
    Try
        ps.Demand()
    Catch ex As Security.SecurityException
        System.Diagnostics.EventLog.WriteEntry("ShopLink", "File " + FullPath + " will not be parsed. " + ex.Message)
        Exit Sub
    Catch ex As Exception
        System.Diagnostics.EventLog.WriteEntry("ShopLink", "File " + FullPath + " will not be parsed. " + ex.Message)
        Exit Sub
    End Try
然后,我将运行服务的用户帐户的文件完全访问权限设置为“拒绝”。执行后,上面的代码不会抛出任何异常,并允许开始文件处理。当服务稍后尝试更改和/或删除该文件时,我收到一个“拒绝访问”异常


有什么建议吗?

为此,我使用这个小功能:

  Private Function HasAccess(ByVal ltFullPath As String)
    Try
      Using inputstreamreader As New StreamReader(ltFullPath)
        inputstreamreader.Close()
      End Using
      Using inputStream As FileStream = File.Open(ltFullPath, FileMode.Open, FileAccess.ReadWrite, FileShare.None)
        inputStream.Close()
        Return True
      End Using
    Catch ex As Exception
      Return False
    End Try
  End Function
那么,就你而言:

If HasAccess(FullPath) ...

通过使用My.Computer.FileSystem.DeleteFile删除文件而不是Kill,我已经解决了这个问题。My.Computer.FileSystem.DeleteFile以上述方式成功请求对文件的完全读/写访问后,执行时没有出现问题,而Kill始终抛出“拒绝访问”异常。

使用“Kill”。。。我知道这是一个非常古老的线程,但我会添加这个,以防有人像我一样偶然发现它。我正在处理一些旧的VB6遗留代码。我的一个客户机用户在kill后打开文件时遇到运行时异常。代码是“杀死”文件,然后用内存中的二进制数据从头开始重建它。“Kill”功能触发了用户的防病毒软件,该软件将文件锁定足够长的时间,导致下一个“Open”语句失败。我使用一个错误日志实用程序发现了这一点(我现在不知道这个名字)。错误日志文件中关于失败的“Open”语句的一行是,由于用户的防病毒软件,该文件的状态为“Delete pending”。

我仍然有相同的问题。您提供的函数对给定文件返回true,但当我尝试使用Kill()删除该文件时,它会抛出一个异常,表示访问被拒绝。您确定该文件不是由另一个进程以独占方式打开的吗?或者该文件不是只读的?这两项都会阻止你删除或修改文件,即使你有权限这样做。是的,我完全肯定这一点。事实上,我回到这里只是想发布我通过使用My.Computer.FileSystem.DeleteFile而不是旧的Kill函数解决了这个问题。在我看来,出于某种奇怪的原因,Kill并没有删除具有与我的服务运行时相同的安全凭据的文件,或者它使Windows以不同的方式解释它们。无论如何,试图用Kill删除文件时抛出了一个“拒绝访问”异常。我认为
file.delete(filename)
也可以。