Verzeichnis überwachen, bei neuer Datei aggieren



  • Hallo,
    ich möchte gerne mit meinem Program ein Screenshot-Verzeichnis überwachen in dem von einem externen Programm desöfteren *.bmps abgespeichert werden. Die will ich dann in jpegs umwandeln und die bmp´s löschen.

    Meine Frage ist jetzt wie ich die Überwachung am dümmsten anstelle. Mit einem Timer das Verzeichnis zu checken scheint mir dümmlich, hat mir vielleicht jemand das eine oder andere Stichwort wie das geschickter zu bewältigen ist.

    Danke schonmal.

    grüße grey



  • http://www.marquardtnet.info/cecke/komponenten.2/2_watchdir.html

    Siehe Win 32 API

    FindFirstChangeNotification



  • danke, schau ich mir sofort an



  • if(FindFirst("c:\\*.jpg", faAnyFile, SearchRec) == 0)
                    ListBox1->Items->Add(SearchRec->Name);
    

    [C++ Fehler] Unit1.cpp(57): E2288 Zeiger auf Struktur auf linker Seite von -> oder von ->* erforderlich*

    hmmm?`Habe den Code direkt aus der Borland Hilfe

    edit: Nevermind, "SearchRec.Name" tut.



  • Ich denke du willst ein Verzeichnis überwachen?
    Stattdessen suchst du nun nach Dateien?

    Kannst ja mal

    http://www.marquardtnet.info/cecke/dlls.3/3_chfilesearch.html

    ausprobieren. Des Weiteren sieht bei mir das Beispiel unter FINDFIRST doch etwas anders aus. Da ist noch eine Schleife, da wird eine weitere Funktion aufgerufen..:

    void __fastcall TForm1::Button1Click(TObject *Sender)
    
    {
      TSearchRec sr;
      int iAttributes = 0;
      StringGrid1->RowCount = 1;
      iAttributes |= faReadOnly * CheckBox1->Checked;
      iAttributes |= faHidden * CheckBox2->Checked;
      iAttributes |= faSysFile * CheckBox3->Checked;
      iAttributes |= faVolumeID * CheckBox4->Checked;
      iAttributes |= faDirectory * CheckBox5->Checked;
      iAttributes |= faArchive * CheckBox6->Checked;
      iAttributes |= faAnyFile * CheckBox7->Checked;
      StringGrid1->RowCount = 0;
      if (FindFirst(Edit1->Text, iAttributes, sr) == 0)
    
      {
        do
        {
          if ((sr.Attr & iAttributes) == sr.Attr)
          {
            StringGrid1->RowCount = StringGrid1->RowCount + 1;
            StringGrid1->Cells[1][StringGrid1->RowCount-1] = sr.Name;
            StringGrid1->Cells[2][StringGrid1->RowCount-1] = IntToStr(sr.Size);
          }
        } while (FindNext(sr) == 0);
        FindClose(sr);
    

    }
    }



  • yo, das is das andere Beispiel.

    Na die Überwachung reicht mir als Indikator. Da ich ja das *.bmp direkt zu jpg komprimieren habe ich immer nur 1 bmp im Verzeichnis und da ich mich mit der api schlecht auskenne gehe ich einfach den Weg über findfirst.



  • GreyHound schrieb:

    [C++ Fehler] Unit1.cpp(57): E2288 Zeiger auf Struktur auf linker Seite von -> oder von ->* erforderlich

    Um das vielleicht noch einmal zu klären: SearchRec ist kein Zeiger auf einen Speicherbereich, sondern eine "feste" Variable. Und deren Member werden - wie du schon richtig erkannt hast - mit einem "." anstelle des "->" angesprochen.



  • jup, nur da die hilfe GENAU diesen Code angibt.

    TSearchRec SearchRec; // globale Variable
    void __fastcallTForm1::SearchClick(TObject *Sender)
    
    {
      FindFirst("c:\\Program Files\\bcb6\\bin\\*.*", faAnyFile, SearchRec);
      Label1->Caption = SearchRec->Name + " is " + IntToStr(SearchRec.Size) + " bytes in size";
    }
    
    void __fastcallTForm1::AgainClick(TObject *Sender)
    
    {
      if (FindNext(SearchRec) == 0)
        Label1->Caption = SearchRec->Name + " is " + IntToStr(SearchRec.Size) + " bytes in size";
      else
        FindClose(SearchRec);
    }
    

    war ich doch zuerst verwundert


Anmelden zum Antworten