2010-02-08 14 views
8

¿Es posible probar la redirección de carpetas en .net? No me refiero a puntos/uniones de reanálisis, quiero decir cuando una carpeta (generalmente Mis documentos) se redirecciona a un servidor.Prueba para la redirección de carpetas "Mis documentos"

En tales casos, si está atravesando el sistema de carpetas de una PC, encontrará un error de IO si llega a la versión local de la carpeta. Por lo tanto, sería útil poder probar la redirección de la carpeta Mis documentos, para poder tomar medidas (omitir la carpeta, saltar al servidor, etc.).

Sé que puedo obtener la ubicación de Mis documentos (pero solo para el usuario actual) usando Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), pero eso no me ayuda a probarlo de antemano a través de (potencialmente) varios usuarios.

¿Debo usar algo como SHGetKnownFolderPath?

Respuesta

0

No estoy seguro de cuál es el objetivo que está tratando de alcanzar, puede obtener directorios en cualquier parte de su árbol para los cuales no tenga permiso para entrar, así que tendrá que atrapar excepciones de todos modos. Pero una forma de determinar si se trata de una unidad de red podría ser usar DriveInfo en combinación con consultar la raíz de la carpeta mydocuments.

String myDocumentsPath = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 
String myDocumentsRoot = Directory.GetDirectoryRoot(myDocumentsPath); 
DriveInfo[] info = DriveInfo.GetDrives(); 
+0

Siempre atraparé las excepciones, pero cuando sea posible quiero preidentificar las excepciones predecibles – hawbsl

1

Va a ser difícil conseguir una solución sin errores 100% a esto (aparte de la captura de las excepciones en el acceso - como otro respondedor ha sugerido) - pero aquí está mi mejor tiro.

Crear un Dictionary<string, string> codificado por tantas ubicaciones comunes para estas carpetas como sea posible (por ejemplo, 'c: \ users [nombre de usuario] \ Mis documentos', 'd: \ users [nombre de usuario] \ Mis documentos') junto con la ubicación real que realmente son, a partir del Environment. Mientras recorre la jerarquía del directorio, busque el directorio en este diccionario para ver si tiene una entrada (si usa un diccionario, use el comparador StringComparer.InvariantCultureIgnoreCase en construcción para evitar tener que perder el tiempo con el caso de las rutas).

Tengo que decir que, sin embargo, puede que tenga que recurrir a la captura de la excepción IO al final; porque la estructura de la carpeta es completamente personal: si tuviera una copia de seguridad de mi carpeta Users \ en Drive D: ¡este enfoque se confundiría!

Cuestiones relacionadas