2012-05-05 8 views
5

Tengo una situación donde un usuario puede especificar dos rutas de acceso separadas, y necesito verificar si una ruta de acceso está "dentro" de la otra. Puedo hacer esto si ambos nombres de ruta son UNC, o ambos están basados ​​en letra de unidad, pero ¿y si están mezclados?Delphi - Comparando dos rutas cuando una es UNC y una es unidad de letra especificada

¿Se puede "normalizar" una ruta como "C: \ Archivos de programa" a "\\ [este nombre de equipo] \ C \ Archivos de programa"? Obviamente, no puedo ir por el otro lado, ya que una carpeta de red en formato UNC puede no tener asignada una letra de unidad correspondiente.

Respuesta

6

Eche un vistazo a la función ExpandUNCFileName.

+0

+1 También la función [WNetGetUniversalName] (http://msdn.microsoft.com/en-us/library/windows/desktop/aa385474%28v=vs.85%29.aspx) puede ayudar también. – RRUZ

+0

(@RRUZ, no es 'ExpandUNCFileName' un contenedor para' WNetGetUniversalName', ¿o puede obtener más información con esa llamada?) Había pensado erróneamente que 'ExpandUNCFilename' no funcionaba en todos los casos, pero era un poco más completo las pruebas muestran que si 'ExpandUNCFileName' no devuelve un nombre que empiece por' \\ 'es porque es una unidad local. De modo que una ruta no puede estar dentro de la otra si cualquiera de sus versiones 'ExpandUNCFileName' comienza con una letra de unidad. – rossmcm

+0

Sí, el 'ExpandUNCFileName' llama a la función 'WNetGetUniversalName' pero con el indicador' UNIVERSAL_NAME_INFO_LEVEL', también puede usar esta función con el valor 'REMOTE_NAME_INFO_LEVEL'. Para que pueda construir una solución más completa utilizando directamente la función NetGetUniversalName. – RRUZ

Cuestiones relacionadas