权限问题???使用System.IO.File.Exists

时间:2019-05-23 18:23:55

标签: vb.net full-trust

我有一个.net 4 winform应用程序,对于一台计算机,System.IO.File.Exists(“ my file path”)每次都会返回false。

  1. 文件在那里。
  2. 如果使用文件浏览器的用户可以查看,打开,保存...文件,并且可以完全访问该文件夹。
  3. 我制作了一个单独的winforms应用程序,该应用程序具有非常简单的代码(请参见下文),并且可以正常工作。找到相同的文件。

代码如下:

If System.IO.File.Exists(txtPath.Text) Then
    lblResults.BackColor = Color.Green
    lblResults.Text = "Found"
Else
    lblResults.BackColor = Color.Red
    lblResults.Text = "No Joy"
End If

我也在无法正常工作的应用程序中使用第三方dll读取imap邮箱。再次,这台计算机尝试将附件保存到错误所在的根目录时,抛出错误

saveAttachedFile:
  index: 0
  dir: Z:\XXX\Email\Attachments\6b333c68-4382-438c-99db-51a13ad1d71a\Attachments\
  ensureDir:
    createDirWin32:
      WindowsError: The system cannot find the path specified.
      WindowsErrorCode: 0x3
    --createDirWin32
    createDirWin32:
      WindowsError: The system cannot find the path specified.
      WindowsErrorCode: 0x3
    --createDirWin32
    Cannot ensure directory existence (2)
    path: Z:\XXX
  --ensureDir
  Directory does not exist and cannot be created.
  directory: Z:\CVO\Email\Attachments\6b333c68-4382-438c-99db-51a13ad1d71a\Attachments\
--saveAttachedFile

所以这似乎是一个权限问题。但是用户/计算机又可以通过资源管理器或仅检查文件是否存在的第二个.net应用程序来访问它。

我不确定还有什么尝试。任何帮助建议将不胜感激。

在域中尝试了一台多台计算机,它们都可以工作。 尝试了不同的用户登录到同一计算机的问题。文件未找到 以管理员相同的问题运行第一个应用程序,找不到文件。

    If System.IO.File.Exists(txtPath.Text) Then
        lblResults.BackColor = Color.Green
        lblResults.Text = "Found"
    Else
        lblResults.BackColor = Color.Red
        lblResults.Text = "No Joy"
    End If

System.IO.File.Exists(txtPath.Text)在一个应用程序中返回False,而在第二个应用程序中返回True

1 个答案:

答案 0 :(得分:0)

首先,不要打{{1​​}}。即使File.Exists()返回File.Exists(),也有很多事情可能导致文件访问失败,因此调用此函数所能真正完成的工作就是磁盘的整个额外行程...在计算机中学期很慢。非常慢。难以想象的缓慢。而且,当异常失败时,您仍然必须处理该异常。

相反,只需尝试打开文件,然后知道在异常发生后如何处理该异常。这是极少数情况下的一种,您确实应该依靠异常处理来进行正常的程序控制流。


顺便说一句...这里仍然可能存在权限问题,尽管我认为真正的问题稍有不同。我注意到代码使用驱动器true的路径,该路径可能是映射到某处服务器的驱动器,并且提到了域。现在,我想知道代码如何运行,因为映射的驱动器工作方式不同。

映射的驱动器通常以用户构造而不是系统构造的形式存在(可能是在系统级别创建映射的驱动器,但这完全不正常或不建议使用,它们通常不会像您期望的那样工作),例如例如,不同的用户可能会将同一驱动器映射到不同的位置,或者一个用户可能使用不同的凭据映射同一驱动器和位置以获得不同的访问权限,或者一个用户可能已映射了一个驱动器,而另一用户则没有。即使两个用户在计算机上都有活动会话,这种情况也可能发生。

在某些情况下,该点通常是映射驱动器不存在,除非您进行额外的工作以使它们可用。这有点像权限,但不完全是;不是您被拒绝访问,而是在这种情况下不存在映射的驱动器。它们不会出现在“计划任务”,“ Windows服务”,“以其他用户身份运行”(有时)以及其他我可能会忘记的情况下。通常,如果用户尚未在计算机上进行交互式登录,那么即使仅以同一用户身份运行服务或任务也是不够的。在这些情况下,您需要使用UNC Z:路径。

这也很好地映射到记录的错误:

  

系统找不到指定的路径。

这并不是说您被拒绝访问,而是找不到它。几乎好像路径...不存在。此外,它解释了“无法创建”问题;您无法在不存在的驱动器上创建目录。