Qt prueba si el archivo es un dispositivo

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.

preguntado el 02 de diciembre de 13 a las 08:12

Quizás estas buscando QIODevice::isSequential()? -

@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. -

2 Respuestas

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

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 or haz tu propia pregunta.