Nombre de la Unidad activa
Hola a todos, me gustaria saber como puedo obtener el nombre de la unidad activa que en mi caso sera un pendrive. Gracias de antemano.
|
¿Esto?... o con nombre te refieres a la etiqueta del disco? |
Si,me refiero a la etiqueta. Imagina que es un pendrive que se llama kingston y aparece como unidad f: seria "f:\Kingston" pues quiero saber como se extrae "Kingston" de la unidad f:. Gracias.
|
Prueba con esto:
Código:
char Vol[256]; // Aquí se obtendrá el nombre del volumen o etiqueta del disco. |
me envia este error:
E2342 Type mismatch in parameter 'lpRootPathName' (wanted 'const char *', got 'wchar_t *') E2034 Cannot convert 'wchar_t *' to 'const char *' |
¿Que compilador usas?, seguro que B2009 o superior.
Es un error del Unicode. Trata de cambiar c_str() por t_str(): Código:
char Vol[256]; // Aquí se obtendrá el nombre del volumen o etiqueta del disco. Código:
wchar_t Vol[256]; // Aquí se obtendrá el nombre del volumen o etiqueta del disco. UNICODE WCHAR. |
Si, llevas razon, se trata de rad 2010. ya funciona sin errores. Infinitas gracias.
Saludos a todos. |
Bueno, pues no salgo de una cuando estoy en otra. Es cierto que funciona y que me da correctamente el nombre de la unidad, pero porque cuando hago una comparacion con un if no reconoce la exactitud del nombre.
Me explico: Label1->caption = Vol (Se visualiza DOWNLOAKEY) ahora if (Vol == "DOWNLOADKEY" ) no reconoce la igualdad. ¿a que se deberá esto?.Gracias. |
Sigue siendo un problema del unicode. Hazlo así:
Código:
if (Vol == L"DOWNLOADKEY" ) Código:
if (Vol == TEXT("DOWNLOADKEY") ) |
Nada, no funciona asi, he tenido que hacer esto:
String NombreUnidad = Vol; if (NombreUnidad == "DOWNLOADKEY" ) y ahora funciona pero no se si es lo adecuado. Gracias |
Con las últimas versiones 2009 y 2010 se ha generado un lío tremendo con el tema del Unicode en las cadenas de texto. La VCL es compatible con Unicode pero no las clásicas funciones de C. Es preferible usar el tipo String que el AnsiString. L seguida de una cadena literal genera ese texto en unicode, así cono TEXT("Mi texto"). Las API terminadas en A son las clásicas no unicode, las terminadas en W trabajan en Unicode (que en el fondo siempre son llamadas por las anteriores)
Lamentablemente no trabajo con estas últimas versiones del Builder y por lo tanto no puedo realizar pruebas. Si tu código funciona, entonces es correcto. Te aconsejo que experimentes de distintas formas y que uses el debug para observar como son las cadenas de texto... Las primeras versiones del B2009 tenían algún bug con el tema del unicode que se arregló mas tarde. Saludos. |
Otra forma de implementar lo que buscas, es pedirle al shell que nos diga su nombre, a través de IShellFolder Interface:
Código:
#define NO_WIN32_LEAN_AND_MEAN Código:
String Name = GetDriveName("C:\\"); |
La franja horaria es GMT +2. Ahora son las 16:31:14. |
Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi