Win32:GetFileAttributes()的解决方法

Mor*_*hai 7 windows winapi visual-c++

我注意到这些年来已经出现过几次问题,而且在我们目前的版本中,Windows 7下似乎发生了很多问题.

当我测试文件是否存在时,使用:: GetFileAttributes(filename),我经常返回INVALID_FILE_ATTRIBUTES,而GetLastError()是ERROR_PATH_NOT_FOUND(3).

然而,该文件不存在,存在的路径,体积存在 - 它的H:\富\酒吧 - 这是我的机器上映射至H网络共享文件夹:.

如果我打开命令窗口,它可以看到它.如果我使用Windows资源管理器导航到该文件夹​​,它可以看到它.

如果我在运行我们的应用程序之前这样做,我们可以看到它.

但是,如果我首先运行我们的应用程序,重启后,在尝试查看H:\之前,我会反复得到上述错误.

在我看来,Windows正在"帮助"我立即返回ERROR_PATH_NOT_FOUND,当给定的共享映射尚未重新连接此会话时(它被设置为自动重新连接).不用说,这很烦人.是否有另一个API调用我可以"确定文件/文件夹X是否存在?"

Jay*_*Jay 5

您是否将应用程序作为服务运行?或者作为其他用户?这可能是权限问题。它使用的凭据可能没有读取该目录的权限。

  • @Mordachai实际上,提升权限确实会导致应用程序不再看到相同的驱动器,因为在启用UAC时Windows将其视为两个不同的会话。本文中的更多详细信息:[启用 UAC 时某些程序无法访问网络位置](http://technet.microsoft.com/en-us/library/ee844140(WS.10).aspx)。正如文章提到的,有一个注册表调整可以使 Windows 在提升会话和非提升会话之间复制映射驱动器。 (3认同)