我注意到这些年来已经出现过几次问题,而且在我们目前的版本中,Windows 7下似乎发生了很多问题。
当我使用:: GetFileAttributes(filename)测试文件的存在时,我经常会收到INVALID_FILE_ATTRIBUTES,而GetLastError()是ERROR_PATH_NOT_FOUND(3)。
但是,文件确实存在,路径存在,卷存在 - 它的H:\ Foo \ Bar - 这是在我的机器上映射到H:的网络共享上的文件夹。
如果我打开命令窗口,它可以看到它。如果我使用Windows资源管理器导航到该文件夹,它可以看到它。
如果我在运行我们的应用程序之前执行这些操作,我们就可以看到它。
但如果我先运行我们的应用程序,重新启动后,在尝试查看H:\之前,我会反复收到上述错误。
在我看来,Windows通过在此会话中未重新连接给定的共享映射(它设置为自动重新连接)时立即返回ERROR_PATH_NOT_FOUND来“帮助”我。不用说,这很烦人。是否有另一个API调用我可以“确定文件/文件夹X是否存在?”
答案 0 :(得分:4)
您是否将该应用程序作为服务运行?还是作为其他一些用户?它可能是权限问题。它使用的凭据可能没有读取该目录的权限。
答案 1 :(得分:3)
需要恢复驱动器连接,这是由shell自动完成的。它曾经由WNetRestoreConnectionW()完成,但该功能已在Vista中删除。我认为你需要这样做this way now。
使用UNC路径(\\share\dir\file
)可能是更好的治疗方法。
答案 2 :(得分:0)
更简单的方法是将ShellExecuteEx
与标记SEE_MASK_CONNECTNETDRV
一起使用。