Win32:GetFileAttributes()的解决方法

时间:2010-04-13 20:04:43

标签: windows visual-c++ winapi

我注意到这些年来已经出现过几次问题,而且在我们目前的版本中,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是否存在?”

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:3)

需要恢复驱动器连接,这是由shell自动完成的。它曾经由WNetRestoreConnectionW()完成,但该功能已在Vista中删除。我认为你需要这样做this way now

使用UNC路径(\\share\dir\file)可能是更好的治疗方法。

答案 2 :(得分:0)

更简单的方法是将ShellExecuteEx与标记SEE_MASK_CONNECTNETDRV一起使用。