我想写一个简单的应用程序,搜索整个系统的文件和文件夹。 但是,应用程序无法按预期工作,只能查找位于/ opt /和/ home中的某些文件。我希望能够搜索任何文件,无论显示它需要多大的缓冲区。 我正在更新textEdit内容后调用此函数:
void FileSearch::fileSearch (QString needle)
{
QProcess file_search_process;
QString exec = "/usr/bin/find";
QStringList params;
params << "/" << "-name" << "*"+needle+"*";
file_search_process.start(exec,params);
file_search_process.waitForFinished();
QByteArray newData=file_search_process.readAll();
this->result = QString::fromLocal8Bit(newData);
//std::cout << this->result.toUtf8().constData() << std::endl;
}
此外,虽然在单独的终端中我确认存在某些匹配,但有时没有显示任何内容。我也试过了"locate" << QStringList() << needle
。另外,我发现它不是由于root权限(我仍然以root身份运行我的应用程序),不知道还有什么可以尝试。
我怀疑这可能是因为Qt应用程序如何处理这个过程。任何帮助都非常感激。
编辑:以下对我来说很好,虽然它实际上并没有解决其他需要使用查找或定位的人的问题:
void FileSearch::fileSearch (QString needle)
{
QDirIterator dirIt("/",QDirIterator::Subdirectories);
while (dirIt.hasNext()) {
dirIt.next();
if (QFileInfo(dirIt.filePath()).isFile())
if(dirIt.filePath().contains(needle, Qt::CaseSensitive))
qDebug()<<dirIt.filePath();
}
}
答案 0 :(得分:0)
> CREATE TABLE t(x INTEGER CHECK (typeof(x) = 'integer'));
> EXPLAIN INSERT INTO t VALUES('42');
addr opcode p1 p2 p3 p4 p5 comment
---- ------------- ---- ---- ---- ------------- -- -------------
0 Init 0 11 0 00 Start at 11
1 OpenWrite 0 2 0 1 00 root=2 iDb=0; t
2 NewRowid 0 1 0 00 r[1]=rowid
3 String8 0 2 0 42 00 r[2]='42'
4 Copy 2 4 0 00 r[4]=r[2]
5 PureFunc0 0 4 3 typeof(1) 01
6 Eq 5 8 3 51 if r[3]==r[5] goto 8
7 Halt 275 2 0 t 03
8 MakeRecord 2 1 3 D 00 r[3]=mkrec(r[2])
9 Insert 0 3 1 t 39 intkey=r[1] data=r[3]
10 Halt 0 0 0 00
11 Transaction 0 1 1 0 01 usesStmtJournal=0
12 String8 0 5 0 integer 00 r[5]='integer'
13 Goto 0 1 0 00
值, QProcess::waitForFinished在30秒后超时。显然,当进程msecs
仍在运行时,您的QProcess实例会被销毁,并且您只获得部分结果或根本没有结果。 如果msecs为-1 ,则该函数不会超时。
我更喜欢使用/usr/bin/find
方法,该方法接受包含程序名称及其参数的单个文本字符串。通过这种方式,您可以更轻松地查看传递给QProcess的内容。
QProcess::start