Me estoy dando cuenta de un problema que se ha deslizado un par de veces en los últimos años, y parece estar sucediendo mucho en Windows 7 en nuestra versión actual.Win32: Solución de problemas para GetFileAttributes()
Cuando pruebo la existencia de un archivo, utilizando :: GetFileAttributes (nombre de archivo), a menudo vuelvo a INVALID_FILE_ATTRIBUTES, y GetLastError() es ERROR_PATH_NOT_FOUND (3).
Sin embargo, el archivo existe, existe la ruta, el volumen existe - su H: \ Foo \ Bar - que es una carpeta en un recurso compartido de red que está mapeada en mi máquina a H :.
Si abro una ventana de comandos, puede verla. Si utilizo Windows Explorer para navegar a esa carpeta, puede verla.
Si hago eso antes de ejecutar nuestra aplicación, podemos verlo.
Pero si ejecuto nuestra aplicación primero, después de un reinicio, antes de que algo haya intentado ver H: \, entonces obtengo el error anterior repetidamente.
Siempre me ha parecido que Windows me está "ayudando" al devolver ERROR_PATH_NOT_FOUND inmediatamente cuando no se ha vuelto a conectar la asignación compartida compartida en esta sesión (está configurada para reconexión automática). Esto es, no hace falta decir, molesto. ¿Hay otra llamada API que podría estar haciendo para "determinar si el archivo/carpeta X existe?"
No creo que el error esté relacionado con la salida de su red ya que obtendría un código de error diferente. Intente registrar el nombre del archivo en un archivo y el resultado de retorno cada vez. Quizás encuentres que la ruta no es válida a veces debido a la memoria corrupta o tal vez a la ruta en blanco. –
Estoy ejecutando esto en mi entorno de desarrollo. Puedo ver que la ruta es válida y el código de retorno es consistentemente 3. La LAN está configurada como un simple sistema punto a punto, y el "servidor" es un simple cuadro XP Pro, con un recurso compartido no protegido (internamente, D : \ Carpetas de inicio). Este sistema ha funcionado durante años, excepto que ocasionalmente recibo ese error, y siempre se borra si simplemente accedo a la unidad mapeada antes de ejecutar nuestra aplicación (o antes de cargar el dev dev para ejecutar en modo de depuración). – Mordachai