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 was 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 the 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 methods 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,
81 * this class will send an event for the directory or file itself, and for sub-files or sub-directories inside the observed directory.
89 * using namespace Tizen::Base;
90 * using namespace Tizen::Io;
91 * using namespace Tizen::App;
93 * class MyFileEventListener
94 * : public Tizen::Io::IFileEventListener
97 * void OnFileEventOccured(const unsigned long events, const Tizen::Base::String &path, const unsigned int eventId)
99 * if (events & FILE_EVENT_TYPE_DELETE)
101 * AppLog(“File path (%ls) is deleted.”, path.GetPointer());
107 * MyClass::Initialize(void)
109 * MyFileEventListener* pMyFileEventListener = new MyFileEventListener();
111 * FileEventManager* pFileEventMgr = new FileEventManager();
112 * pFileEventMgr->Construct(*pMyFileEventListener);
114 * String filePath(App::GetInstance()->GetAppDataPath() + L”myFile.txt”);
115 * pFileEventMgr->AppPath(filePath, FILE_EVENT_TYPE_DELETE);
120 class _OSP_EXPORT_ FileEventManager
121 : public Tizen::Base::Object
126 * The object is not fully constructed after this constructor is called. @n
127 * For full construction, the Construct() method must be called right after calling this constructor.
131 FileEventManager(void);
134 * This destructor overrides Tizen::Base::Object::~Object().
138 virtual ~FileEventManager(void);
141 * Initializes this instance of %FileEventManager.
145 * @return An error code
146 * @param[in] listener The listener to be invoked when monitored files are changed
147 * @exception E_SUCCESS The method is successful.
148 * @exception E_MAX_EXCEEDED The number of opened files has exceeded the maximum limit.
149 * @exception E_IO Either of the following conditions has occurred:
150 * - The specified listener cannot be registered in worker thread.
151 * - Detected corruption of a file.
153 result Construct(IFileEventListener& listener);
157 * Adds the monitor file, or modifies an existing monitor file in the specified path. @n
158 * The application must have read permission for this @c path. The file event type can be set in @c eventsToMonitor.
162 * @return An error code
163 * @param[in] path The path to the directory or file to monitor
164 * @param[in] eventsToMonitor The kind of event to monitor @n
165 * Multiple event types can be combined using bitwise OR (see Tizen::Io::FileEventType). @n
166 * The ::FILE_EVENT_TYPE_ALL is provided for all file event types. @n
167 * If a specific @c eventsToMonitor is set, the events that have the specified file event are returned.
168 * @exception E_SUCCESS The method is successful.
169 * @exception E_INVALID_ARG The specified eventsToMonitor contains no valid events.
170 * @exception E_FILE_NOT_FOUND An entry for the specified path could not be found.
171 * @exception E_ILLEGAL_ACCESS The specified path is not permitted.
172 * @exception E_IO Either of the following conditions has occurred:
173 * - The specified path is outside the process's accessible address space.
174 * - The number of file monitors has exceeded the maximum limit.
175 * - Failed to allocate a needed resource.
176 * - Detected corruption of a file.
179 result AddPath(const Tizen::Base::String& path, unsigned long eventsToMonitor);
182 * Removes the specified monitored file associated with the current instance.
186 * @return An error code
187 * @param[in] path The path to the directory or file that is monitored
188 * @exception E_SUCCESS The method is successful.
189 * @exception E_IO The specified path is not monitored.
191 result RemovePath(const Tizen::Base::String& path);
195 * The implementation of this copy constructor is intentionally blank and declared as private to prohibit copying of objects.
199 FileEventManager(const FileEventManager& fileEventManager);
202 * The implementation of this copy assignment operator is intentionally blank and declared as private to prohibit copying of objects.
206 FileEventManager& operator =(const FileEventManager& fileEventManager);
208 class _FileEventManagerImpl* __pFileEventManagerImpl;
210 friend class _FileEventManagerImpl;
212 }; // FileEventManager
216 #endif //_FIO_FILE_EVENT_MANAGER_H_