/
findtask.cpp
98 lines (91 loc) · 2.23 KB
/
findtask.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
#include "findtask.h"
#include <QDebug>
findTask::findTask(const QString& dirName, const QString& pattern)
{
#ifdef Q_WS_WIN
args<<"/c"<<"dir"<<"/b"<<"/s"<<pattern;
#elif defined(Q_WS_MAC)
//find /Users/kp/ -name "*.txt" -print
QString pat;
pat.append("\"");
pat.append(pattern);
pat.append("\"");
args<<dirName<<"-name"<<pat<<"-print";
#elif defined(Q_OS_LINUX)
QString pat;
pat.append("find ");
pat.append(dirName);
pat.append(" -name ");
pat.append(pattern);
pat.append(" -print");
args<<pat;
#endif
qDebug()<<args;
process = QSharedPointer<QProcess>(new QProcess());
process->setReadChannel( QProcess::StandardOutput );
process->setReadChannelMode( QProcess::SeparateChannels );
process->setWorkingDirectory( dirName );
//process->setWorkingDirectory( "/usr/bin" );
connect( process.data(), SIGNAL(finished(int,QProcess::ExitStatus )), this, SLOT(findTaskFinished(int,QProcess::ExitStatus) ));
connect( process.data(), SIGNAL(readyRead()),this,SLOT(readFindResult()));
ended=false;
}
findTask::~findTask()
{
//delete process;
}
void findTask::run()
{
#ifdef Q_WS_WIN
process->start("cmd.exe", args);
if (!process->waitForStarted())
{
emit finished();
return;
}
#elif defined(Q_WS_MAC)
process->start("find", args);
if (!process->waitForStarted())
{
emit finished();
return;
}
process->waitForFinished(600000);
emit finished();
#elif defined(Q_OS_LINUX)
qDebug()<<args;
process->start(args[0]);
if (!process->waitForStarted())
{
emit finished();
return;
}
#endif
}
void findTask::readFindResult()
{
QStringList list;
qDebug()<<"1";
QString result = process->readAll();
qDebug()<<result;
list = result.split("\n");
list.removeLast();
#ifndef Q_OS_LINUX
for( int j=0; j<list.count(); j++ )
{
list[j].chop(1);
}
#endif
qDebug()<<list;
emit getSearchResult( list );
return;
}
bool findTask::isEnded()
{
return ended;
}
void findTask::findTaskFinished( int exit, QProcess::ExitStatus status)
{
emit finished();
return;
}