Skip to content

A cross-platform folder & file watching library using win32, inotify or std.file

Notifications You must be signed in to change notification settings

GargoyleSoftware/FSWatch

Repository files navigation

FSWatch

CIDub versionDub downloads

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.

Comparison between implementations

PlatformWatching DirectoryWatching File
WindowsReadDirectoryChangesW (very fast, accurate)polling using std.file.timeLastModified and std.file.exists (fast, not accurate for quick write)
Linuxinotify (very fast, accurate)inotify (very fast, accurate)
Otherpolling 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!

Example

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()} }

About

A cross-platform folder & file watching library using win32, inotify or std.file

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages

  • D99.6%
  • Other0.4%