Qt prueba si el archivo es un dispositivo
Frecuentes
Visto 659 veces
1
Tengo una cadena de nombre de archivo de un dispositivo serie. Puede ser un puerto COM de Windows o un UNIX /dev/
archivo de dispositivo de caracteres.
Así que estoy buscando algo como:
bool isCharDevice(QString name) {
// something like
return QFileInfo(name).isSomething();
// or
return QFile(name).isSomething();
}
Busco lo mismo, lo que haría en Unix Shell con test -c $name
, o desde código C con stat
(fragmento de código para referencia a continuación). Pero quiero que también funcione en Windows, y preferiría una solución simple de Qt. no encontre respuesta en QArchivo y QFileInfo documentación.
¿Es esto posible con Qt simple?
Si no, y tengo que bajar por el #ifdef
ruta, ¿cómo probar aproximadamente lo mismo (verificar que el nombre del archivo se refiere a algo que podría ser un puerto serie) en Windows?
Como referencia, el fragmento de código POSIX:
struct stat st;
stat(name_cstr, &st);
if (S_ISCHR(st.st_mode)) {...}
Actualizar: Después de más investigación, parece que los puertos COM de Windows no son accesibles con QFile
en absoluto: QFile("COM4:").exists()
devolverá falso incluso si ese puerto COM existe y el comando del símbolo del sistema type COM4:
obras. Entonces, parece que lo que pido no es posible con Qt simple en Windows, de todos modos necesito usar una biblioteca de puerto serie.
2 Respuestas
1
Como los dispositivos de caracteres generalmente no admiten el acceso aleatorio a los datos, puede intentar usar QIODevice::isSequential()
.
Respondido el 03 de diciembre de 13 a las 07:12
1
QFileInfo(name).isFile()
devuelve falso para archivos no regulares.
Respondido 19 ago 21, 10:08
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas qt file winapi posix or haz tu propia pregunta.
Quizás estas buscando QIODevice::isSequential()? - thuga
@thuga Eso es bueno, ¡no noté ese método! Sin embargo, acabo de probar y me di cuenta de que, en realidad, los dispositivos especiales no son accesibles con QFile en Windows, al parecer. Así que siéntete libre de convertir ese comentario en una respuesta corta. - hyde