Qt测试文件是否是设备

时间:2013-12-02 08:15:37

标签: qt file winapi posix

我有一个串行设备的文件名字符串。它可以是Windows COM端口,也可以是UNIX /dev/字符设备文件。

所以我正在寻找类似的东西:

bool isCharDevice(QString name) {
    // something like
    return QFileInfo(name).isSomething();
    // or
    return QFile(name).isSomething();
}

我追求的是同样的事情,我会在unix shell中使用test -c $name,或使用stat的C代码(以下参考代码片段)。但我希望它也适用于Windows,我更喜欢简单的Qt解决方案。我在QFileQFileInfo文档中找不到答案。

这可以用普通的Qt吗?

如果没有,我需要沿着#ifdef路线走下去,如何在Windows中测试大致相同的东西(验证文件名是指可能是串口的东西)?


供参考,POSIX代码片段:

    struct stat st;
    stat(name_cstr, &st);
    if (S_ISCHR(st.st_mode)) {...}

更新:经过更多调查后,似乎无法使用QFile访问Windows COM端口:QFile("COM4:").exists()即使该COM端口存在且命令也将返回false提示命令type COM4:有效。因此,在Windows上看起来根本不可能使用普通的Qt,无论如何都需要使用串口库。

1 个答案:

答案 0 :(得分:1)

由于角色设备通常不支持随机访问数据,因此您可以尝试使用QIODevice::isSequential()