2010-03-21 13 views
11

¿alguien sabe cómo comprobar si un archivo o directorio es o bien un enlace simbólico , Junction Point, Punto de montaje o duro Enlace?Detectar enlaces simbólicos, puntos de unión y puntos de montaje de enlaces físicos

Por lo que sé, se detectan enlaces simbólicos al verificar un archivo para su atributo "ReparsePoint". Los puntos de unión se detectan al marcar un directorio para el atributo "ReparsePoint". Entonces, si el atributo "ReparsePoint" se establece en un archivo, debe ser un enlace simbólico; de lo contrario, si está establecido en un directorio, solo puede ser un punto de unión ... ¿no?

Bueno hasta ahora, pero todavía no tengo idea de cómo detectar "Puntos de montaje" y "Enlaces duros". ¿Alguien puede decirme cómo hacer esto?

Respuesta

10

Los enlaces simbólicos, los puntos de unión y los puntos de montaje son ejemplos de diferentes puntos de análisis. Los enlaces duros, sin embargo, son solo archivos regulares. En NTFS, todos los archivos son enlaces duros. Puedes detectar que un archivo tiene múltiples enlaces duros apuntando a él, pero no hay un "archivo real" al que apunte. Puede pensar en enlaces duros como nombres diferentes para el mismo archivo.

He aquí alguna información sobre cómo acceder a los puntos de análisis de C#: http://www.codeproject.com/KB/vista/ReparsePointID.aspx?display=Print

He aquí alguna información sobre cómo hacerlo en C: http://blog.kalmbach-software.de/2008/02/

+0

Ok, esto significa que si tiene FileA.txt y un enlace físico FileB.txt apuntando a FileA.txt no hay manera de detectar que FileB.txt es difícil ¿Enlazar? – Alexander

+6

Ambos son enlaces duros. – akappa

+0

Ok, ¿hay alguna forma de detectar los puntos de montaje? – Alexander

5

enlaces duros:

Puede detectar si hay varios nombres están apuntando al mismo "fragmento de datos" o "contenido del archivo" invocando la función de la API de Win32 GetFileInformationByHandle. El miembro de la nNumberOfLinks BY_HANDLE_FILE_INFORMATION estructura devuelta contiene el número total de enlaces

puntos de montaje:

Se puede recorrer todos los puntos de montaje en un volumen con FindFirstVolumeMountPoint y FindNextVolumeMountPoint. También se debe usar FindVolumeMountPointClose para cerrar el identificador de búsqueda.

De .NET

Haciendo esto desde .NET requerirá algún P/Invoke magia

1

favor ver mi pregunta NTFS Junctions, trouble understanding the API. Es una especie de duplicado de la pregunta. Pero explico todo acerca de cómo se implementan los puntos de reanálisis, los puntos de montaje, las uniones y los enlaces simbólicos, usando C/C++. En lugar de simplemente dar enlaces a API, a ciegas ...

Cuestiones relacionadas