ich habe gerade ein Problem mit meiner QT Anwendung. Ich versuche Dateisystemveränderungen mithilfe einer Datenbank zu erkennen. Leider habe ich das Problem das der Eintrag für die Spalte foundflag fast immer auf 0 bleibt, und nicht auf 1 gesetzt wird wie es der code vorgibt.
Der Betreffende code ist der hier.
Code: Alles auswählen
#include "sfilesystemcompare.h"
SFileSystemCompare::SFileSystemCompare(QString path, QObject *parent) : QThread(parent)
{
sqlmanager = new SSqlManager(this);
rootpath = path;
}
SFileSystemCompare::~SFileSystemCompare()
{
delete sqlmanager;
}
void SFileSystemCompare::run()
{
QDirIterator iterator(rootpath, FS_FILTER_FLAGS, QDirIterator::Subdirectories | QDirIterator::FollowSymlinks);
qDebug() << "Starting comparison!";
while(iterator.hasNext())
{
iterator.next();
QString path = iterator.filePath();
QString permissions;
if(iterator.fileInfo().permission(QFile::ReadOwner)) permissions.append("r");
else permissions.append("-");
if(iterator.fileInfo().permission(QFile::WriteOwner)) permissions.append("w");
else permissions.append("-");
if(iterator.fileInfo().permission(QFile::ExeOwner)) permissions.append("x");
else permissions.append("-");
if(iterator.fileInfo().permission(QFile::ReadGroup)) permissions.append("r");
else permissions.append("-");
if(iterator.fileInfo().permission(QFile::WriteGroup)) permissions.append("w");
else permissions.append("-");
if(iterator.fileInfo().permission(QFile::ExeGroup)) permissions.append("x");
else permissions.append("-");
if(iterator.fileInfo().permission(QFile::ReadOther)) permissions.append("r");
else permissions.append("-");
if(iterator.fileInfo().permission(QFile::WriteOther)) permissions.append("w");
else permissions.append("-");
if(iterator.fileInfo().permission(QFile::ExeOther)) permissions.append("x");
else permissions.append("-");
QString lastChange = iterator.fileInfo().lastModified().toString("yyyyMMdd-hhmmsszzz");
QString size = QString::number(iterator.fileInfo().size());
QString isDir;
if(iterator.fileInfo().isDir()) isDir = "1";
else isDir = "0";
QSqlQuery query(sqlmanager->getDB());
QSqlQuery update(sqlmanager->getDB());
query.exec("SELECT id, permissions, lastChange, size, isDir FROM filesystem WHERE path='" + path + "'");
update.exec("UPDATE filesystem SET foundflag=0");
if(query.next())
{
//File existed before
if(query.value(1).toString() != permissions)
{
//Permissions changed
qDebug() << "Permissions changed" << path;
update.exec("UPDATE filesystem SET permissions='" + permissions + "' WHERE id=" + query.value(0).toString());
emit fsChanged(SFileSystemWatcherEvent(SFileSystemWatcherEvent::attrib, path));
}
if((query.value(2).toString() != lastChange || query.value(3).toString() != size) && isDir=="0")
{
qDebug() << "File changed" << path;
update.exec("UPDATE filesystem SET lastChange='" + lastChange + "' WHERE id=" + query.value(0).toString());
update.exec("UPDATE filesystem SET size=" + size + " WHERE id=" + query.value(0).toString());
emit fsChanged(SFileSystemWatcherEvent(SFileSystemWatcherEvent::modify, path));
}
qDebug() << "File found!" << path;
update.exec("UPDATE filesystem SET foundflag=1 WHERE id=" + query.value(0).toString());
qDebug() << update.lastQuery();
}
else
{
//File is new
qDebug() << "New file" << path;
query.exec("INSERT INTO filesystem (path, permissions, lastChange, size, isDir, foundflag) VALUES ('" + path + "', '" + permissions + "', '" + lastChange + "', " + size + ", " + isDir + ", 1)");
qDebug() << query.lastQuery();
emit fsChanged(SFileSystemWatcherEvent(SFileSystemWatcherEvent::created, path));
}
}
}
void SFileSystemCompare::doComparison()
{
this->start();
}
Code: Alles auswählen
Database already exists!
Database opened successfully
Starting comparison!
File found! "test/folder"
"UPDATE filesystem SET foundflag=1 WHERE id=2"
File found! "test/folder/testsubfile"
"UPDATE filesystem SET foundflag=1 WHERE id=3"
File found! "test/folder/testsubfile2"
"UPDATE filesystem SET foundflag=1 WHERE id=8"
File found! "test/folder/testsubfile3"
"UPDATE filesystem SET foundflag=1 WHERE id=6"
File found! "test/folder/testsubfile4"
"UPDATE filesystem SET foundflag=1 WHERE id=7"
File found! "test/test"
"UPDATE filesystem SET foundflag=1 WHERE id=1"
File found! "test/test2"
"UPDATE filesystem SET foundflag=1 WHERE id=4" Gruß Lukas