AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Dateiänderungen überwachen

Ein Thema von SnuffMaster23 · begonnen am 2. Jan 2008 · letzter Beitrag vom 5. Jan 2008
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von SnuffMaster23
SnuffMaster23

Registriert seit: 13. Feb 2006
Ort: Kempten
253 Beiträge
 
#1

Dateiänderungen überwachen

  Alt 2. Jan 2008, 15:02
Hi,

ich suche eine Möglichkeit um auf Änderungen in bestimmten Dateien zu reagieren. Ich will damit Sourcefiles per FTP hochladen sobald sie gespeichert (eben geändert) werden.

Ich weiß nicht wie Dateimanager sowas handhaben, aber die (Explorer mal ausgenommen^^) kriegen die Änderungen immer mit einer kleinen Verzögerung mit. Diese Verzögerung scheint mir immer recht gleich zu sein, das spricht dafür dass sie benachrichtigt werden.

Mir würde es ja auch schon reichen wenn ich das Verzeichnis überwachen könnte.

Die Alternative wäre halt mit nem Timer immer nachzugucken ob sich was geändert hat aber das erscheint mir zu trivial
"Conspiracy is the poor man's mapping of the world" - Fredric Jameson
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Dateiänderungen überwachen

  Alt 2. Jan 2008, 15:06
Du könntest es mit einer ShellNotify-Kompo versuchen
Markus Kinzler
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.944 Beiträge
 
Delphi 12 Athens
 
#3

Re: Dateiänderungen überwachen

  Alt 2. Jan 2008, 15:25
Zitat von SnuffMaster23:
Mir würde es ja auch schon reichen wenn ich das Verzeichnis überwachen könnte.

Die Alternative wäre halt mit nem Timer immer nachzugucken ob sich was geändert hat aber das erscheint mir zu trivial
So machen viele Programme das wenn sich früher(noch vor DDE und OLE ) 2 Programme unterschiedlicher Hersteller unterhielten hat man das über das setzen und löschen und überwachen von solchen Semaphoren gemacht.
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Benutzerbild von SnuffMaster23
SnuffMaster23

Registriert seit: 13. Feb 2006
Ort: Kempten
253 Beiträge
 
#4

Re: Dateiänderungen überwachen

  Alt 2. Jan 2008, 15:43
ShellNotify klingt gut, aber ich find sie nicht
Beim danach googeln bin ich auf FindFirstChangeNotification gestoßen, das dürfte mir genügen.

Danke euch!

//Edit: brr, was war denn das für Deutsch?^^
"Conspiracy is the poor man's mapping of the world" - Fredric Jameson
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.861 Beiträge
 
Delphi 11 Alexandria
 
#5

Re: Dateiänderungen überwachen

  Alt 2. Jan 2008, 16:02
-ShellNotify: http://www.delphi.com.ar/
Oder in der JVCL gibt es auch eine
Markus Kinzler
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#6

Re: Dateiänderungen überwachen

  Alt 2. Jan 2008, 16:13
Moin Snuffmaster,

alternativ ginge auch ReadDirectoryChangesW.
Zu beidem wirst Du aber auch hier in der DP einiges an Beispielen finden.
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Benutzerbild von SnuffMaster23
SnuffMaster23

Registriert seit: 13. Feb 2006
Ort: Kempten
253 Beiträge
 
#7

Re: Dateiänderungen überwachen

  Alt 4. Jan 2008, 19:38
Also nachdem ich mich ne Weile mit den API-Funktionen rumgeschlagen hab hab ich mal ShellNotify ausprobiert.
Das hat zwar immer brav geschriehen wenn was passiert is, aber es konnte mir keinen Dateinamen liefern und hat immer gemeint dass sich was am Verzeichnis geändert hat. Ein bisschen zu ungenau für mich^^
Ich habs jetz ausschließlich mit ReadDirectoryChangesW mit dem Code von hier.

Delphi-Quellcode:
procedure TMonitorThread.Execute;
var
  pBuf: Pointer;
  dwBufLen: DWORD;
  dwRead: DWORD;
  FNI: FILE_NOTIFY_INFORMATION;
  pWork: Pointer;
  sFileName: Widestring;
  i: Integer;
begin
  dwBufLen := 65536;
  pBuf := AllocMem(dwBufLen);
  while not terminated do
  begin
    ReadDirectoryChangesW(Form1.DirHandle, pBuf, dwBufLen, subDirs,
                          FILE_NOTIFY_CHANGE_LAST_WRITE,
                          @dwRead, nil, nil);
    pWork := pBuf;
    repeat
      StrMove(@FNI,pWork,12);
      PChar(pWork) := PChar(pWork)+12;
      sFileName := StringOfChar(#00,FNI.dwFileNameLength);
      StrMove(@sFileName[1],pWork,FNI.dwFileNameLength);
      FsFileName := WideCharToString(PWideChar(sFileName));
      FsFileName := copy(FsFileName,1,length(FsFileName) shl 1);
      PChar(pWork) := PChar(pBuf)+FNI.dwNextEntryOffset;
      for i := 0 to Watches.Count - 1 do //
        if Like(FsFileName, Watches[i]) then // mit ein paar Wildcard-Mustern vergleichen
        begin
          Synchronize(UploadFile);
          break;
        end;
    until FNI.dwNextEntryOffset = 0;
  end;
  FreeMem(pBuf,dwBufLen);
end;
//Edit: Fähla korrigiert
"Conspiracy is the poor man's mapping of the world" - Fredric Jameson
  Mit Zitat antworten Zitat
C.Schoch

Registriert seit: 2. Jan 2006
Ort: Wüstenrot
235 Beiträge
 
Turbo Delphi für Win32
 
#8

Re: Dateiänderungen überwachen

  Alt 4. Jan 2008, 20:16
Hi,

Hast du das mal ein bischen laufen lassen?
Bei mir hats nämlich in der repeat schleife ab und zu mal eine Exception gegeben.
Tschau Christian
Das System hofft auf Besserung
[Siemens]
  Mit Zitat antworten Zitat
Benutzerbild von SnuffMaster23
SnuffMaster23

Registriert seit: 13. Feb 2006
Ort: Kempten
253 Beiträge
 
#9

Re: Dateiänderungen überwachen

  Alt 5. Jan 2008, 15:08
Richtig benutzt hab ichs noch nicht aber natürlich ausprobiert, dabei ist noch nix passiert. Ich werds heut mal exzessiv nutzen.

Fertig isses ja noch nicht, wenn ich den TThread terminiere hängt er ja noch in ReadDirectoryChangesW und kriegt noch die nächste Änderung mit. Das is besonders unschön wenn ich nen neuen Thread mit anderen Einstellungen starte und der alte lauscht noch mit^^
"Conspiracy is the poor man's mapping of the world" - Fredric Jameson
  Mit Zitat antworten Zitat
Christian Seehase
(Co-Admin)

Registriert seit: 29. Mai 2002
Ort: Hamburg
11.117 Beiträge
 
Delphi 11 Alexandria
 
#10

Re: Dateiänderungen überwachen

  Alt 5. Jan 2008, 15:28
Moin SnuffMaster,

ich hab' hier auch mal ein Beispiel gepostet, wie man ReadDirectoryChangesW asynchron benutzt (mit Overlapped), weil mich das mit dem nicht beendbaren Thread auch genervt hat
Tschüss Chris
Die drei Feinde des Programmierers: Sonne, Frischluft und dieses unerträgliche Gebrüll der Vögel.
Der Klügere gibt solange nach bis er der Dumme ist
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:39 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz