¿Cómo puedo encontrar la letra del controlador del disco duro principal en un sistema operativo Windows?¿Cómo puedo obtener la letra de la unidad del sistema?
Es decir, la unidad con Program Files
, System32
, y así sucesivamente.
¿Cómo puedo encontrar la letra del controlador del disco duro principal en un sistema operativo Windows?¿Cómo puedo obtener la letra de la unidad del sistema?
Es decir, la unidad con Program Files
, System32
, y así sucesivamente.
La llamada API GetWindowsDirectory podría ser de ayuda. Puede analizar esta información usando las API para analizar la información de la letra de la unidad.
** ¿Qué ** API usaría para "analizar más detenidamente" los resultados de 'GetWindowsDirectory()'? – unixman83
Simplemente obtenga la primera letra de la ruta del directorio de Windows. –
Hay una variable de entorno llamada SystemDrive
que está configurada en la unidad del sistema (sorprendentemente). La llamada getenv()
es cómo puede llegar a ella.
char *sysDrive = getenv ("SystemDrive");
if (sysDrive == NULL) {
// vote me down.
} else {
// vote me up and use it.
}
This page listas de toda una serie de variables de entorno disponibles si no se puede confiar en directorios específicos existentes en la unidad del sistema.
Como alternativa, use la llamada API de Windows, SHGetSpecialFolderPath(), y pase el CSIDL correcto. Entonces no deberías tener que depender de las variables de entorno.
Aunque tenga en cuenta en esas páginas que esto ha sido reemplazado por otras funciones en Vista (todavía debe funcionar, ya que esta función se convierte en un envoltorio alrededor de la nueva).
SYSTEMDRIVE
PROGRAMFILES
SYSTEMROOT
WINDIR
No asuma Archivos de programa es en la misma unidad como Windows. Por lo general es así. por lo general.
Debe mencionar que los que están en mayúsculas son nombres para las variables de entorno de Windows. – unixman83
_Por lo general_, ¿seguro? –
Nunca utilice variables env como en la respuesta incorrecta anterior.
variables de env son actualizables por el usuario.
Claro, el usuario puede cambiar los valores de% WINDIR%, etc., pero el usuario también puede meterse con su registro, reemplazar todos los archivos de recursos de su aplicación con sus LOLCats o instalar Linux. Esas no son cosas para las que su aplicación necesita tener un plan de contingencia. – bsneeze
@cali, entonces ** ¿qué debemos usar? Estoy de acuerdo en que las variables de entorno son propensas a errores. – unixman83
https://msdn.microsoft.com/en-us/library/ms724426.aspx
' vacío PrintError (TCHAR * msg) { DWORD ENUM; TCHAR sysMsg [256]; TCHAR * p; eNum = GetLastError(); FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, ENUM, MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT), sysMsg, 256, NULL); // easilty se podría cambiar a /* FormatMessage (FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_IGNORE_INSERTS, NULL, GetLastError(), MAKELANGID (LANG_NEUTRAL, SUBLANG_DEFAULT), sysMsg, 256, NULL); */
// Trim the end of the line and terminate it with a null
p = sysMsg;
while((*p > 31) || (*p == 9)) ++p;
do { *p-- = 0; } while((p >= sysMsg) &&
((*p == '.') || (*p < 33)));
// Display the message
_tprintf(TEXT("\n\t%s failed with error %d (%s)"), msg, eNum, sysMsg);
} ' pero explica cómo obtener la información del sistema en profundidad en su mayor parte. muy informativo
Por favor, vuelva a formatear su respuesta. – ThomasEdwin
Necesita formatear la respuesta con etiquetas de código y saltos de línea. – Alan
No asuma que los programas estarán en "\ Archivos de programa", o archivos de sistema en "\ Windows \ System32" - hay llamadas de API para recuperar rutas exactas para éstas y más ... – Shog9
¿Puede darme un ejemplo de una de esas llamadas API para que pueda investigarlas? Estoy buscando ciertos archivos asociados con los programas –
http://msdn.microsoft.com/en-us/library/ms724373.aspx ... http://msdn.microsoft.com/es-es-es /library/bb762181.aspx – Shog9