Ende von file copy erkennen

Alles rund um die Programmierung mit Qt
Antworten
Exolon
Beiträge: 5
Registriert: 3. Januar 2007 13:00

Ende von file copy erkennen

Beitrag 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
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag 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...
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
patrik08
Beiträge: 746
Registriert: 27. Februar 2006 10:48
Wohnort: DE Freiburg

Re: Ende von file copy erkennen

Beitrag 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 */
.........................
speack português italiano deutsch english castellà qt
Mecki
Beiträge: 3
Registriert: 14. März 2007 15:33
Wohnort: Heidelberg
Kontaktdaten:

Datei/Verzeichnisbeobachtung

Beitrag 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.
Exolon
Beiträge: 5
Registriert: 3. Januar 2007 13:00

Re: Datei/Verzeichnisbeobachtung

Beitrag 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.
Antworten