A cross platform library simplifying watching for file changes using a non-blocking interface using the Win32 API, inotify or std.file.dirEntries as fallback.
| Platform | Watching Directory | Watching File |
|---|---|---|
| Windows | ReadDirectoryChangesW (very fast, accurate) | polling using std.file.timeLastModified and std.file.exists (fast, not accurate for quick write) |
| Linux | inotify (very fast, accurate) | inotify (very fast, accurate) |
| Other | polling using std.file.dirEntries (slow, not accurate) | polling using std.file.timeLastModified and std.file.exists (fast, not accurate for quick write) |
To force usage of the std.file polling implementation you can just add version = FSWForcePoll;
Don't do this unless you have a specific reason as you will lose speed and accuracy!
voidmain(){// Initializes a FileWatch instance to watch on `project1/` (first argument) recursively (second argument)auto watcher = FileWatch("project1/", true); while (true){// This will fetch all queued events or an empty array if there are noneforeach (event; watcher.getEvents()){// paths are relative to the watched directory in most casesif (event.path =="dub.json"|| event.path =="dub.sdl"){if (event.type == FileChangeEventType.create){// dub.json or dub.sdl got created } elseif (event.type == FileChangeEventType.modify){// dub.json or dub.sdl got modified } elseif (event.type == FileChangeEventType.remove){// dub.json or dub.sdl got deleted } } if (event.type == FileChangeEventType.rename){// The file `event.path` has been removed to `event.newPath` } elseif (event.type == FileChangeEventType.createSelf){// the folder we are watching has been created } elseif (event.type == FileChangeEventType.removeSelf){// the folder we are watching has been deleted or renamed } } // ... myapp.handleInput(); myapp.update(); myapp.draw()} }