Я пытаюсь читать данные из текстовых файлов и сохранять токены в базе данных SQLite, работающей в Windows.
Размер файлов составляет около 300 МБ, дело в том, что я пока не использую потоки, приложение сворачивается и застревает с сообщением «не отвечает»
вот мой код
QDir dir(ui->lineEdit->text());
if(dir.exists() && ui->lineEdit->text()!=""){
CreateTables();
dir.setFilter(QDir::Files | QDir::Hidden | QDir::NoSymLinks);
dir.setSorting(QDir::Size | QDir::Reversed);
QFileInfoList list = dir.entryInfoList();
for (int i = 0; i < list.size(); ++i) {
QFileInfo fileInfo = list.at(i);
QFile file(ui->lineEdit->text()+"/"+ fileInfo.fileName());
if (file.open(QIODevice::ReadOnly | QIODevice::Text)) {
QSqlQuery qrry;
qrry.prepare( "INSERT INTO documents (path) VALUES ('"+ui->lineEdit->text()+"/"+ fileInfo.fileName()+"')" );
qrry.exec();
QString line;
QTextStream in(&file);
int lineCount=0;
while (!in.atEnd()) {
line = in.readLine();
lineCount++;
QRegExp rx("(\\ |\\,|\\.|\\:|\\t)");
QStringList line_tokens = line.split(rx);
for(int i=0;i<line_tokens.length();i++){
if(line_tokens[i].length()>3){
QSqlQuery qry;
qry.prepare( "INSERT INTO tokens (token,path,line) VALUES ('"+line_tokens[i]+"', '"+ui->lineEdit->text()+"/"+ fileInfo.fileName()+"','"+QString::number(lineCount)+"')" );
qry.exec();
}
}
}
}
else{
QMessageBox::information(this,"File Read Error","Couldn't Open File, Please Make Sure That This File Is Accessable And Readable !");
}
std::cout << std::endl;
}
}
else{
QMessageBox::critical(this,"Directory choosen is Not Valid","Please Make Sure That You Have Choosen A Valid Directory!");
}
это работает для файлов небольшого размера, но когда дело доходит до огромного количества данных, оно выдает сообщение "не отвечает"
будут ли потоки спасать приложение от свертывания ??
и как я могу реализовать потоки для выполнения этой работы для более чем 20 файлов по 15 МБ каждый