2011-07-22 10 views
6

Utilizo esto para obtener el contenido del directorio foo: FindFirstFile(L"foo\\*", &findData). Funciona muy bien cuando foo es un directorio regular. Sin embargo, cuando foo es un cruce que apunta a otro directorio (creado con mklink /j foo C:\gah) FindFirstFile falla.FindFirstFile y Junctions

Los documentos tienen esto que decir: "Si la ruta apunta a un enlace simbólico, el búfer WIN32_FIND_DATA contiene información sobre el enlace simbólico, no el destino". Pero cuando ejecuto el depurador acabo de obtener un INVALID_HANDLE_VALUE y findData permanece intacto.

Entonces, ¿cómo puedo solucionar esto?

Respuesta

9

Raymond Chen tiene un answer para usted.

Funciones como GetFileAttributes y FindFirstFile, cuando se le preguntó a proporcionar información sobre un enlace simbólico, devuelve información sobre el enlace en sí y no el destino del enlace. Si se utiliza la función FindFirstFile, se puede decir que tiene un enlace simbólico porque los atributos de archivo tendrán establecido el indicador de FILE_ATTRIBUTES_REPARSE_POINT, y el miembro de dwReserved0 contendrá el valor especial IO_REPARSE_TAG_SYMLINK.

Bien, bien, ahora sé que tengo un enlace simbólico, pero ¿y si quiero información sobre el destino del enlace? Por ejemplo, quiero saber el tamaño del objetivo de enlace, su hora de última modificación y su nombre.

Para hacer esto, abra el enlace simbólico. El administrador de E/S elimina las referencias del enlace simbólico y le proporciona un control del destino del enlace. Usted puede llamar a funciones como GetFileSize, GetFileInformationByHandleEx o GetFinalPathNameByHandle para obtener información sobre el destino del enlace simbólico.

Cuestiones relacionadas