¿Cómo puedo saber si un archivo está en una carpeta que ha sido SUBST'ed o está ubicado en una carpeta de usuario usando C#?Cómo determinar si una ruta de directorio fue SUBST'd
Respuesta
Creo que necesitas P/Invocar QueryDosDevice() para la letra de la unidad. Las unidades Subst devolverán un enlace simbólico, similar a \ ?? \ C: \ blah. El prefijo \ ?? \ indica que está sustituido, el resto le da el directorio drive +.
Si SUBST se ejecuta sin parámetros, genera una lista de todas las sustituciones actuales. Obtenga la lista y verifique su directorio con la lista.
También está el problema de asignar un volumen a un directorio. Nunca intenté detectarlos, pero los directorios de punto de montaje aparecen de forma diferente que los directorios normales, por lo que deben tener un atributo diferente de algún tipo, y eso podría detectarse.
yo creo que hay un par de opciones -
clasesVia System.Management: http://briancaos.wordpress.com/2009/03/05/get-local-path-from-unc-path/
O
Via P/Al invocar esta función MAPI: ScUNCFromLocalPath http://msdn.microsoft.com/en-us/library/cc842520.aspx
esto parece prometedor, mirándolo – petejamd
Este es el código que utilizo para obtener la información si se substed un camino: (Algunas partes provienen de pinvoke)
[DllImport("kernel32.dll", SetLastError=true)]
static extern uint QueryDosDevice(string lpDeviceName, StringBuilder lpTargetPath, int ucchMax);
public static bool IsSubstedPath(string path, out string realPath)
{
StringBuilder pathInformation = new StringBuilder(250);
string driveLetter = null;
uint winApiResult = 0;
realPath = null;
try
{
// Get the drive letter of the path
driveLetter = Path.GetPathRoot(path).Replace("\\", "");
}
catch (ArgumentException)
{
return false;
//<------------------
}
winApiResult = QueryDosDevice(driveLetter, pathInformation, 250);
if(winApiResult == 0)
{
int lastWinError = Marshal.GetLastWin32Error(); // here is the reason why it fails - not used at the moment!
return false;
//<-----------------
}
// If drive is substed, the result will be in the format of "\??\C:\RealPath\".
if (pathInformation.ToString().StartsWith("\\??\\"))
{
// Strip the \??\ prefix.
string realRoot = pathInformation.ToString().Remove(0, 4);
// add backshlash if not present
realRoot += pathInformation.ToString().EndsWith(@"\") ? "" : @"\";
//Combine the paths.
realPath = Path.Combine(realRoot, path.Replace(Path.GetPathRoot(path), ""));
return true;
//<--------------
}
realPath = path;
return false;
}
asegúrese de tener en su clase usando System.Runtime.InteropServices; De lo contrario, obtendrá un error. – gg89
- 1. ¿Cómo determinar si una ruta está dentro de un directorio? (POSIX)
- 2. ¿Cómo determinar si una ruta es un subdirectorio de otra?
- 3. Determinar si una ruta dentro de un NSString es a un directorio, o un archivo?
- 4. ¿Cómo determinar dónde fue el foco?
- 5. Cómo determinar si un directorio está en la misma partición
- 6. cómo determinar si una imagen es explícita
- 7. Compruebe si una cadena es una ruta válida de directorio (carpeta) de Windows
- 8. Cómo determinar el directorio de la extensión
- 9. Determinar si el directorio está bajo el control de git
- 10. Cómo determinar si una URL arbitraria coincide con una ruta definida
- 11. Determinar a través de C# si una cadena es una ruta de archivo válida
- 12. ¿Cómo determinar si Type es una estructura?
- 13. ¿Cómo determinar si una secuencia es bitónica?
- 14. ¿Cómo puedo determinar si una URL redirige?
- 15. ¿Cómo comprobar si el descifrado fue exitoso?
- 16. Cómo detectar si DOMContentLoaded fue despedido
- 17. Ruta del directorio local
- 18. Buscar directorio principal de una ruta
- 19. Detectar si la ruta del usuario tiene un directorio específico
- 20. Cómo determinar si una excepción es de un tipo particular
- 21. ¿Cómo puedo verificar si existe una ruta (ASP.NET MVC) para una ruta determinada?
- 22. Comprobando si algo fue malloced
- 23. ¿Cómo puedo encontrar el directorio padre de una ruta?
- 24. ¿La ruta es un directorio?
- 25. ¿Cómo comprobar si existe un archivo o directorio denotado por una ruta en Golang?
- 26. ¿Cómo puedo saber si una ruta determinada es un directorio o un archivo? (C/C++)
- 27. Determinar la ruta del script BASH ejecutar
- 28. Compruebe si una ruta representa un archivo o una carpeta
- 29. Eliminar un directorio de la ruta completa del directorio
- 30. Determinar si una lista es un directorio o archivo en Python a través de FTP
No entiendo qué quiere decir con "subst'd" o " carpeta de usuario " – simendsjo
' subst' es un comando dos que creará un alias para un directorio (por ejemplo, 'subst T: C: \ workareas' creará una nueva unidad que apunta a C: \ workareas) para carpeta de usuario, i Estoy buscando averiguar si está en 'C: \ Documents and Settings \% username%' cleanly. – petejamd