2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 // Licensed under the Apache License, Version 2.0 (the License);
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
8 // http://www.apache.org/licenses/LICENSE-2.0
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an "AS IS" BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
18 * @file FIoFileEventManager.h
19 * @brief This is the header file for the %FileEventManager class.
21 * This header file contains the declarations of the %FileEventManager class.
24 #ifndef _FIO_FILE_EVENT_MANAGER_H_
25 #define _FIO_FILE_EVENT_MANAGER_H_
27 #include <FBaseObject.h>
29 namespace Tizen { namespace Base
34 namespace Tizen { namespace Io
37 class IFileEventListener;
38 class _FileEventManagerImpl;
43 * Defines the file event type.
49 FILE_EVENT_TYPE_ACCESS = 0x01, /**<%File was accessed (read)*/
50 FILE_EVENT_TYPE_ATTRIBUTE = 0x04, /**<Metadata changed*/
51 FILE_EVENT_TYPE_CLOSE_WRITE = 0x08, /**<%File opened for writing was closed*/
52 FILE_EVENT_TYPE_CLOSE_NOWRITE = 0x10, /**<%File not opened for writing was closed*/
53 FILE_EVENT_TYPE_CREATE = 0x100, /**<%File/directory created in monitored directory*/
54 FILE_EVENT_TYPE_DELETE = 0x200, /**<%File/directory deleted from monitored directory*/
55 FILE_EVENT_TYPE_DELETE_SELF = 0x400, /**<Monitored file/directory was itself deleted.*/
56 FILE_EVENT_TYPE_MODIFY = 0x02, /**<%File was modified*/
57 FILE_EVENT_TYPE_MOVE_SELF = 0x800, /**<Monitored file/directory was itself moved.*/
58 FILE_EVENT_TYPE_MOVED_FROM = 0x40, /**<%File moved out of monitored directory. */
59 FILE_EVENT_TYPE_MOVED_TO = 0x80, /**<%File moved into monitored directory. */
60 FILE_EVENT_TYPE_OPEN = 0x20 /**<%File was opened. */
64 * All file event types.
68 static const unsigned long FILE_EVENT_TYPE_ALL = FILE_EVENT_TYPE_ACCESS | FILE_EVENT_TYPE_ATTRIBUTE | FILE_EVENT_TYPE_CLOSE_WRITE |
69 FILE_EVENT_TYPE_CLOSE_NOWRITE | FILE_EVENT_TYPE_CREATE | FILE_EVENT_TYPE_DELETE | FILE_EVENT_TYPE_DELETE_SELF |
70 FILE_EVENT_TYPE_MODIFY | FILE_EVENT_TYPE_MOVE_SELF | FILE_EVENT_TYPE_MOVED_FROM | FILE_EVENT_TYPE_MOVED_TO | FILE_EVENT_TYPE_OPEN;
73 * @class FileEventManager
74 * @brief This class provides a mechanism for monitoring file system events.
78 * @final This class is not intended for extension.
80 * The %FileEventManager class can be used to monitor individual files or directories. When a directory is monitored, this class will send an event for the directory or file itself, and for sub-files or sub-directories inside the observed directory.
88 * using namespace Tizen::Base;
89 * using namespace Tizen::Io;
90 * using namespace Tizen::App;
92 * class MyFileEventListener
93 * : public Tizen::Io::IFileEventListener
96 * void OnFileEventOccured(const unsigned long events, const Tizen::Base::String &path, const unsigned int eventId)
98 * if (events & FILE_EVENT_TYPE_DELETE)
100 * AppLog(“File path (%ls) is deleted.”, path.GetPointer());
106 * MyClass::Initialize(void)
108 * MyFileEventListener* pMyFileEventListener = new MyFileEventListener();
110 * FileEventManager* pFileEventMgr = new FileEventManager();
111 * pFileEventMgr->Construct(*pMyFileEventListener);
113 * String filePath(App::GetInstance()->GetAppDataPath() + L”myFile.txt”);
114 * pFileEventMgr->AppPath(filePath, FILE_EVENT_TYPE_DELETE);
119 class _OSP_EXPORT_ FileEventManager
120 : public Tizen::Base::Object
125 * The object is not fully constructed after this constructor is called. For full construction, the Construct() method must be called right after calling this constructor.
129 FileEventManager(void);
132 * This destructor overrides Tizen::Base::Object::~Object().
136 virtual ~FileEventManager(void);
139 * Initializes this instance of %FileEventManager. @n
143 * @return An error code
144 * @param[in] listener A listener invoked when monitored files are changed.
145 * @exception E_SUCCESS The method is successful.
146 * @exception E_MAX_EXCEEDED The number of opened files has exceeded the maximum limit.
147 * @exception E_IO Either of the following conditions has occurred: @n
148 * - Fail to attach on platform.
149 * - Detected corruption of a file.
151 result Construct(IFileEventListener& listener);
155 * Adds a new monitor file, or modifies an existing monitor file, for the file whose location is specified in path; the application has to have read permission for this %path. %File event type can be set in %eventsToMonitor.
159 * @return An error code
160 * @param[in] path The path to the directory or file to monitor
161 * @param[in] eventsToMonitor The kind of event to monitor @n
162 * Multiple event type can be combined using bitwise OR (see Tizen::Io::FileEventType). @n
163 * The Tizen::Io::FILE_EVENT_TYPE_ALL is provided for all file event type @n
164 * If a specific eventsToMonitor is set, the events that have the specified file event are returned.
165 * @exception E_SUCCESS The method is successful.
166 * @exception E_INVALID_ARG The specified eventsToMonitor contains no valid events.
167 * @exception E_FILE_NOT_FOUND An entry for the specified path could not be found.
168 * @exception E_ILLEGAL_ACCESS The specified path is not permitted.
169 * @exception E_IO Either of the following conditions has occurred: @n
170 * - The specified path outside of the process's accessible address space. @n
171 * - The number of file monitor has been exceeded the maximum limit or
172 * the failed to allocate a needed resource. @n
173 * - Detected corruption of a file.
176 result AddPath(const Tizen::Base::String& path, unsigned long eventsToMonitor);
179 * Removes the monitored file associated with the current instance.
183 * @return An error code
184 * @param[in] path The path to the directory or file that is monitored
185 * @exception E_SUCCESS The method is successful.
186 * @exception E_IO The specified path is not monitored.
188 result RemovePath(const Tizen::Base::String& path);
192 * The implementation of this copy constructor is intentionally blank and declared as private to prohibit copying of objects.
196 FileEventManager(const FileEventManager& fileEventManager);
199 * The implementation of this copy assignment operator is intentionally blank and declared as private to prohibit copying of objects.
203 FileEventManager& operator =(const FileEventManager& fileEventManager);
205 class _FileEventManagerImpl* __pFileEventManagerImpl;
207 friend class _FileEventManagerImpl;
209 }; // FileEventManager
213 #endif //_FIO_FILE_EVENT_MANAGER_H_