vb.net - 在处理 VB .NET 4.5 中的文件之前测试我是否具有对文件的完全读/写访问权限

标签 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.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) ...

关于vb.net - 在处理 VB .NET 4.5 中的文件之前测试我是否具有对文件的完全读/写访问权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18220170/

相关文章:

mysql - vb.net中datagridview的问题

windows - System.IO.File.ReadAllText 的默认编码是什么

mysql - 使用 vb.net 将数据集值移动到标签框控件时出错

winforms - 在堆栈跟踪中获取 VB.NET 行号

vb.net - 从 UserControl vb.net 中删除属性和事件

xml - 使用多个命名空间反序列化 xml

.net - 如何使用 LINQ 获取集合中的项目数

c# - 当 Window AllowsTransparency = true 时 WPF 硬件加速了吗?

c# - 您应该在 Windows 8 应用程序的哪个位置编码 'privacy policy' ?

c# - 使用 LINQ 编译唯一对象列表