首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >C++ Qt查找/dev/中的每个磁盘

C++ Qt查找/dev/中的每个磁盘
EN

Stack Overflow用户
提问于 2013-07-07 18:31:36
回答 2查看 245关注 0票数 0

我有一个U盘代码,它会搜索/dev/目录中包含“disk”一词的每个目录(mac上是我的),这是所有C++驱动器所在的位置,但当我执行QRegExp("disk*")时,它找不到任何U盘,但当我在终端中执行“挂载”时,我可以找到我的名为disk1s5的U盘。为什么我在QRegExp上找不到?

代码语言:javascript
运行
复制
#ifdef __APPLE__
DIR *dir = NULL;
dirent *search = NULL;
dir = opendir("/dev/");
if (dir != NULL)
{
    while ((search = readdir(dir)) != NULL)
    {
        QRegExp exp("disk*");
        exp.setPatternSyntax(QRegExp::Wildcard);
        exp.setCaseSensitivity(Qt::CaseInsensitive);
        if (exp.exactMatch(search->d_name))
        {
            return 0;
        } else {
            return 2;
        }

    }
} else {
    return 1;
}

endif

EN

回答 2

Stack Overflow用户

发布于 2013-07-07 19:34:54

您似乎混淆了globbing (shell等中使用的通配符)和正则表达式。但它们是不同的。

在正则表达式中,*表示前面的项出现零次或多次。因此,disk*匹配字符串disdiskdiskkdiskkk等。

如果要检查disk后跟任何内容(包括nothing),则必须使用disk.*,其中.表示任何字符,因此.*表示出现零次或多次的任何字符。这与球化模式disk*完全对应。

根据您的需要,您还可以使用disk.+来匹配disk,后跟出现一次或多次的任何字符(与disk.*相比,它不匹配字符串disk本身)。

我强烈建议您阅读documentation以了解正则表达式是如何工作的。

票数 3
EN

Stack Overflow用户

发布于 2013-07-08 16:21:29

如果你只想从/dev中找到所有的disk*目录,并且你使用的是Qt,你可以这样做:

代码语言:javascript
运行
复制
QDir dir("/dev");
QStringList nameFilter = QStringList() << "disk*";
QStringList disks = dir.entryList(nameFilter, QDir::System|QDir::Dirs);

foreach (QString d, disks)
    qDebug() << d;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17511349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档