我有一個主線程和一個處理某些文件的線程。當主線程監視的文件夾發生更改時,會向處理線程發送信號以啓動。處理完一個文件後,我想將其刪除,然後讓文件夾檢查文件夾中是否還有其他文件。如果有,然後重複該過程。通過更改內容從文件夾中刪除文件
我的問題是在文件夾的重複檢查。在處理線程上。該功能在下面的代碼中列出,問題是我無法從文件夾中刪除文件。我相當卡住,所以任何輸入讚賞。
在dataprocessor.h
...
QList<QString> justProcessed;
...
在dataprocessor.cpp
void DataProcessor::onSignal() {
// Will keep running as long as there are files in the spool folder, eating it's way through
bool stillFiles = true;
QDir dir(this->monitoredPath);
dir.setFilter(QDir::Files | QDir::NoDotAndDotDot);
dir.setSorting(QDir::Time);
while(stillFiles) {
// Have to update on each iteration, since the folder changes.
dir.refresh();
QFileInfoList fileList = dir.entryInfoList();
QString activeFile = "";
foreach(QFileInfo file, fileList) {
if((file.suffix() == "txt") && !justProcessed.contains(file.fileName())) {
// Is a text file. Set for processing and break foreach loop
activeFile = file.fileName();
break;
}
}
// If none of the files passed the requirements, then there are no more spl files in the folder.
qDebug() << activeFile;
if(activeFile == "") {
qDebug() << "Finished";
emit finished();
stillFiles = false;
}
// File is a new file, start processing
qDebug() << "Selected for processing";
qDebug() << monitoredPath + "/" + activeFile;
if(!dir.remove(monitoredPath + "/" + activeFile)) qDebug() << "Could not remove file";
justProcessed.append(activeFile);
} // While end
}
請讓我知道如果我錯過了提供一些信息。
您的後臺打印程序服務是否正在運行? – Nejat
「我無法從文件夾中刪除文件」 - 這是什麼意思? remove()是否返回false?然後使用'activeFile = file.absoluteFilePath();'來獲得完整的路徑,這更容易處理。然後,刪除它:'QFile f(activeFile); if(!f.remove())qDebug(「Could not remove%s:%s」,qPrintable(activeFile),qPrintable(f.errorString()));'要了解爲什麼失敗。 –
@KubaOber我初始化QString的原因是因爲我在線程中初始化時遇到了其他問題。如果我例如定義一個int並且我沒有用例如一個0,然後我得到什麼看起來是一個內存地址,即使我沒有初始化它作爲一個指針。我有一天學會了如何使用線程,所以有些事情我還不確定。用'isEmpty()'表示好點。謝謝。 – Attaque