summaryrefslogtreecommitdiff
path: root/zen/dir_watcher.h
diff options
context:
space:
mode:
authorDaniel Wilhelm <daniel@wili.li>2014-04-18 17:15:16 +0200
committerDaniel Wilhelm <daniel@wili.li>2014-04-18 17:15:16 +0200
commitbd6336c629841c6db3a6ca53a936d629d34db53b (patch)
tree3721ef997864108df175ce677a8a7d4342a6f1d2 /zen/dir_watcher.h
parent4.0 (diff)
downloadFreeFileSync-bd6336c629841c6db3a6ca53a936d629d34db53b.tar.gz
FreeFileSync-bd6336c629841c6db3a6ca53a936d629d34db53b.tar.bz2
FreeFileSync-bd6336c629841c6db3a6ca53a936d629d34db53b.zip
4.1
Diffstat (limited to 'zen/dir_watcher.h')
-rw-r--r--zen/dir_watcher.h50
1 files changed, 50 insertions, 0 deletions
diff --git a/zen/dir_watcher.h b/zen/dir_watcher.h
new file mode 100644
index 00000000..df3c444c
--- /dev/null
+++ b/zen/dir_watcher.h
@@ -0,0 +1,50 @@
+// **************************************************************************
+// * This file is part of the FreeFileSync project. It is distributed under *
+// * GNU General Public License: http://www.gnu.org/licenses/gpl.html *
+// * Copyright (C) 2008-2011 ZenJu (zhnmju123 AT gmx.de) *
+// **************************************************************************
+
+#ifndef DIR_WATCHER_348577025748023458
+#define DIR_WATCHER_348577025748023458
+
+#include <vector>
+#include <memory>
+#include "file_error.h"
+
+namespace zen
+{
+//Windows: ReadDirectoryChangesW http://msdn.microsoft.com/en-us/library/aa365465(v=vs.85).aspx
+//Linux: inotify http://linux.die.net/man/7/inotify
+
+//watch directory including subdirectories
+/*
+!Note handling of directories!:
+ Linux: newly added subdirectories are reported but not automatically added for watching! -> reset Dirwatcher!
+ removal of top watched directory is NOT notified!
+ Windows: removal of top watched directory also NOT notified (e.g. brute force usb stick removal)
+ however manual unmount IS notified (e.g. usb stick removal, then re-insert), but watching is stopped!
+ Renaming of top watched directory handled incorrectly: Not notified(!) + changes in subfolders
+ report FILE_ACTION_MODIFIED for directory (check that should prevent this fails!)
+
+ Overcome all issues portably: check existence of watched directory externally + reinstall watch after changes in directory structure (added directories) are possible
+*/
+class DirWatcher
+{
+public:
+ DirWatcher(const Zstring& directory); //throw FileError, ErrorNotExisting
+ ~DirWatcher();
+
+ //extract accumulated changes since last call
+ std::vector<Zstring> getChanges(); //throw FileError
+
+private:
+ DirWatcher(const DirWatcher&);
+ DirWatcher& operator=(const DirWatcher&);
+
+ struct Pimpl;
+ std::unique_ptr<Pimpl> pimpl_;
+};
+
+}
+
+#endif
bgstack15