权限问题???使用 System.IO.File.Exists
permission issue??? with using System.IO.File.Exists
我有一个 .net 4 winform 应用程序,对于一台计算机,System.IO.File.Exists("my file path") 每次 return 都是错误的。
- 文件在那里。
- 如果用户使用文件资源管理器可以查看、打开、保存...文件并具有对文件夹的完全访问权限。
- 我制作了一个单独的 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
我也在无法工作的应用程序中使用第 3 方 dll 来读取 imap 邮箱。这台计算机在尝试将附件保存到根相同路径时再次抛出错误,错误如下
saveAttachedFile:
index: 0
dir: Z:\XXX\Email\Attachmentsb333c68-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\Attachmentsb333c68-4382-438c-99db-51a13ad1d71a\Attachments\
--saveAttachedFile
看来是权限问题。但话又说回来 user/computer 可以通过资源管理器或第二个仅检查文件是否存在的 .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) return 一个应用程序为假,但在第二个应用程序中为真
首先,不要打电话给File.Exists()
。有很多事情会导致文件访问失败,即使在 File.Exists()
returns true
时也是如此,因此调用此函数真正完成的只是对磁盘的完整额外访问。 . 这在计算机方面很慢。非常慢。难以想象的慢。而且失败时你仍然需要处理异常。
相反,只需尝试打开文件,并知道在失败时如何处理异常。这是您真正应该依赖异常处理来实现正常程序控制流的(极少数)情况之一。
顺便提一下...这里仍然可能存在权限问题,但我认为真正的问题略有不同。我注意到代码使用驱动器 Z:
的路径,这很可能是映射到某处服务器的驱动器,并提到了域。现在我想知道代码是如何运行的,因为 映射驱动器的工作方式不同。
映射驱动器通常作为用户构造而不是系统构造存在(可以在系统级别创建映射驱动器,但这完全不正常或不推荐,而且它们通常不会像您预期的那样工作) ,这样不同的用户可能将相同的驱动器映射到不同的地方,或者一个用户可能使用不同的凭据映射相同的驱动器和位置以获得不同的访问权限,或者一个用户可能映射了一个驱动器,但另一个用户没有。即使两个用户在计算机上都有活动会话,也可能发生这种情况。
要点是映射驱动器通常 在某些情况下不存在 ,除非您做额外的工作使它们可用。这有点像权限,但不完全是;不是您被拒绝访问,而是映射的驱动器在此上下文中不存在。他们不会出现在计划任务、Windows 服务、运行 作为另一个用户(有时)以及我可能忘记的其他情况下。通常,即使 运行 作为同一个用户的服务或任务是不够的,如果用户还没有在机器上进行交互式登录。在这些情况下,您需要使用 UNC \server\share
路径。
这也很好地映射到记录的错误:
The system cannot find the path specified.
它并没有说您被拒绝访问,而是它甚至找不到它。几乎就好像这条路……不存在一样。此外,它还解释了“无法创建”的问题;您不能在不存在的驱动器上创建目录。
我有一个 .net 4 winform 应用程序,对于一台计算机,System.IO.File.Exists("my file path") 每次 return 都是错误的。
- 文件在那里。
- 如果用户使用文件资源管理器可以查看、打开、保存...文件并具有对文件夹的完全访问权限。
- 我制作了一个单独的 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
我也在无法工作的应用程序中使用第 3 方 dll 来读取 imap 邮箱。这台计算机在尝试将附件保存到根相同路径时再次抛出错误,错误如下
saveAttachedFile:
index: 0
dir: Z:\XXX\Email\Attachmentsb333c68-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\Attachmentsb333c68-4382-438c-99db-51a13ad1d71a\Attachments\
--saveAttachedFile
看来是权限问题。但话又说回来 user/computer 可以通过资源管理器或第二个仅检查文件是否存在的 .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) return 一个应用程序为假,但在第二个应用程序中为真
首先,不要打电话给File.Exists()
。有很多事情会导致文件访问失败,即使在 File.Exists()
returns true
时也是如此,因此调用此函数真正完成的只是对磁盘的完整额外访问。 . 这在计算机方面很慢。非常慢。难以想象的慢。而且失败时你仍然需要处理异常。
相反,只需尝试打开文件,并知道在失败时如何处理异常。这是您真正应该依赖异常处理来实现正常程序控制流的(极少数)情况之一。
顺便提一下...这里仍然可能存在权限问题,但我认为真正的问题略有不同。我注意到代码使用驱动器 Z:
的路径,这很可能是映射到某处服务器的驱动器,并提到了域。现在我想知道代码是如何运行的,因为 映射驱动器的工作方式不同。
映射驱动器通常作为用户构造而不是系统构造存在(可以在系统级别创建映射驱动器,但这完全不正常或不推荐,而且它们通常不会像您预期的那样工作) ,这样不同的用户可能将相同的驱动器映射到不同的地方,或者一个用户可能使用不同的凭据映射相同的驱动器和位置以获得不同的访问权限,或者一个用户可能映射了一个驱动器,但另一个用户没有。即使两个用户在计算机上都有活动会话,也可能发生这种情况。
要点是映射驱动器通常 在某些情况下不存在 ,除非您做额外的工作使它们可用。这有点像权限,但不完全是;不是您被拒绝访问,而是映射的驱动器在此上下文中不存在。他们不会出现在计划任务、Windows 服务、运行 作为另一个用户(有时)以及我可能忘记的其他情况下。通常,即使 运行 作为同一个用户的服务或任务是不够的,如果用户还没有在机器上进行交互式登录。在这些情况下,您需要使用 UNC \server\share
路径。
这也很好地映射到记录的错误:
The system cannot find the path specified.
它并没有说您被拒绝访问,而是它甚至找不到它。几乎就好像这条路……不存在一样。此外,它还解释了“无法创建”的问题;您不能在不存在的驱动器上创建目录。