Seite 1 von 1
Ende von file copy erkennen
Verfasst: 14. März 2007 07:57
von Exolon
Hi,
ich 'bastle' grad auf Mac an einem kleinen Bildverarbeitungs Tool in welchem die Bilder eines Verzeichnisses in der Art einer Gallerie dargestellt werden. Nun möchte ich automatisch erkennen wenn jemand mit dem Finder (oder dem Terminal) ein Bild ins Gallerie-Verzeichniss kopiert und dieses dann Anzeigen. Meine implementierung mittels QFileSystemWatcher gibt mir ein Signal wenn sich im Gallerie-Verzeichniss was tut, das Problem ist nur dass dieses Signal beim Start des Kopiervorgangs kommt. Die RAW-Bilddateien können aber durchaus ihre Zeit brauchen bis sie kopiert wurden.
Wie kann ich erkennen wann eine Datei fertig kopiert wurde wenn ich nicht selbst der Urheber des Kopiervorgangs bin?
Danke und schönen Gruss
Exo
Verfasst: 14. März 2007 08:14
von Christian81
So auf die Schnelle wüsste ich keine schöne Möglichkeit. Ggf. einen Timer der jede Sekunde auf eine Größenänderung schaut? Mhhh...
Re: Ende von file copy erkennen
Verfasst: 14. März 2007 17:48
von patrik08
Exolon hat geschrieben:Hi,
ich 'bastle' grad auf Mac an einem kleinen Bildverarbeitungs Tool in welchem die Bilder eines Verzeichnisses in der Art einer Gallerie dargestellt werden. Nun möchte ich automatisch erkennen wenn jemand mit dem Finder (oder dem Terminal) ein Bild ins Gallerie-Verzeichniss kopiert und dieses dann Anzeigen. Meine implementierung mittels QFileSystemWatcher gibt mir ein Signal wenn sich im Gallerie-Verzeichniss was tut, das Problem ist nur dass dieses Signal beim Start des Kopiervorgangs kommt. Die RAW-Bilddateien können aber durchaus ihre Zeit brauchen bis sie kopiert wurden.
Wie kann ich erkennen wann eine Datei fertig kopiert wurde wenn ich nicht selbst der Urheber des Kopiervorgangs bin?
Danke und schönen Gruss
Exo
Das selbe problem hatte ich bei Drag & Drop image file gefunden ....
window gibt der event wenn noch nicht gescrieben ist....
Ich oeffne firefox drag ein bild in meinem html edit tool bei mac e linux
ist die QUrl ok aber window ist noch am schreiben.... beim event....
ich habe es dann so gemacht....
Code: Alles auswählen
#if defined Q_WS_MAC
Reload_Editor();
#endif
#if defined Q_WS_WIN
/////////qDebug() << "### wait on save time time.......... " << urlmixed.size();
QTimer::singleShot(300, this, SLOT(Reload_Editor())); /* wait to write ready image on disk cache */
#endif
#if defined Q_WS_X11
Reload_Editor();
#endif
Den drag event ......
Code: Alles auswählen
void Base_Edit::Grabdata(const QMimeData *data)
{
if (!data) {
return;
}
if (!editrun) {
QMessageBox::warning(this, tr("Error"),tr("Pleas Drag on edit modus... on View Modus is not possibel to insert items!"));
return;
}
if ( data->hasImage() ) {
numeroimmagine++;
const QString nuovaimmagine = QString("%2image_%1.jpg").arg(numeroimmagine).arg(WORK_CACHEDIR);
QImage images = qvariant_cast<QImage>(data->imageData());
bool salvato = images.save(nuovaimmagine,"JPG",100);
qDebug() << "###salva in cartella " << nuovaimmagine;
qDebug() << "###s alvato " << salvato;
if (salvato) {
Create_New_Image_Tag(nuovaimmagine);
Reload_Editor();
}
return;
}
if ( data->formats().contains("text/html") ) {
////////////////qDebug() << "### incomming drag text/html ";
QString draghtml = data->html();
QTextDocumentFragment fragment = QTextDocumentFragment::fromHtml(draghtml);
wtext->textCursor().insertFragment(fragment);
if (draghtml.contains("<img", Qt::CaseInsensitive )) {
Reload_Editor(); /* to grab image like firefox */
}
////////////// qDebug() << "### draghtml " << draghtml;
return;
}
if ( data->formats().contains("text/plain") ) {
////////////////qDebug() << "### incomming drag text/html ";
QString draghtml = data->text();
QTextDocumentFragment fragment = QTextDocumentFragment::fromHtml(QString("<p>%1</p>").arg(draghtml));
wtext->textCursor().insertFragment(fragment);
return;
}
QStringList urlmixed;
urlmixed.clear();
QList<QUrl> urlelist;
if (data->hasUrls()) {
urlelist = data->urls();
for ( int i = 0; i < urlelist.size(); ++i ) {
QUrl gettyurl(urlelist.at(i));
if (gettyurl.isValid()) {
QString shema = gettyurl.scheme();
///////qDebug() << "### shema " << shema;
//////////qDebug() << "### gettyurl " << gettyurl;
if (shema == "file") {
urlmixed.append(QString(gettyurl.toLocalFile()));
} else {
urlmixed.append(QString(gettyurl.toString()));
}
}
}
for ( int i = 0; i < urlmixed.size(); ++i ) {
QString itemimage = urlmixed.at(i);
Create_New_Image_Tag(itemimage);
qDebug() << "### itemimage " << itemimage;
}
}
#if defined Q_WS_MAC
Reload_Editor();
#endif
#if defined Q_WS_WIN
/////////qDebug() << "### wait on save time time.......... " << urlmixed.size();
QTimer::singleShot(300, this, SLOT(Reload_Editor())); /* wait to write ready image on disk cache */
#endif
#if defined Q_WS_X11
Reload_Editor();
#endif
}
/* Reload_Editor(); check image && resource to load on QTextBrowser */
Datei/Verzeichnisbeobachtung
Verfasst: 15. März 2007 14:19
von Mecki
QT bietet ab 4.2 die Klasse QFileSystemWatcher zur Überwachung von Dateien und Verzeichnissen auf Änderungen. Über den Signal-Slot Mechanismus kann man sich über Änderungen informieren lassen und im SLOT entsprechend reagieren.
Re: Datei/Verzeichnisbeobachtung
Verfasst: 24. April 2007 08:10
von Exolon
Mecki hat geschrieben:QT bietet ab 4.2 die Klasse QFileSystemWatcher zur Überwachung von Dateien und Verzeichnissen auf Änderungen. Über den Signal-Slot Mechanismus kann man sich über Änderungen informieren lassen und im SLOT entsprechend reagieren.
Hatte bereits geschrieben: Meine implementierung mittels QFileSystemWatcher gibt mir ein Signal wenn sich im Gallerie-Verzeichniss was tut, das Problem ist nur dass dieses Signal beim Start des Kopiervorgangs kommt. genau das kann ich aber nicht gebrauchen. Ich bräuchte das Ende des Vorgangs, nicht den Anfang.
Sämtliche polling oder 'verzögerungs' Lösungen funktionieren leider nicht sauber.