-
Notifications
You must be signed in to change notification settings - Fork 239
File System Helpers (filesystem.h)
Simpler use of CreateFileW
enabled with default parameters. Functions named to describe the behavior of the flags that control the behavior.
auto handle = wil::open_file(path.c_str());
The design uses "open", "create" and "truncate" to distinguish the cases that open existing files and use that creates and modifies existing files. Here is more complicated use that demonstrates the handle and error code being returned (used in success cases, so providing access to it is essential.).
auto path = wil::ExpandEnvironmentStringsW<std::wstring>(LR"(%TEMP%\create_file_test.txt)");
auto [fileHandle, error] = wil::try_create_new_file(path.c_str())
Here, are the method names that describe the semantics.
auto handle = wil::create_new_file(path.c_str());
auto handle = wil::open_or_create_file(path.c_str());
auto handle = wil::open_or_truncate_existing_file(path.c_str());
auto handle = wil::truncate_existing_file(path.c_str());
Observe changes in a folder system including the specific changes using the Win32 API ReadDirectoryChangesW
#include <wil/filesystem.h>
auto reader = wil::make_folder_change_reader(folder.Path().c_str(), true, wil::FolderChangeEvents::All,
[](wil::FolderChangeEvent event, PCWSTR fileName)
{
switch (event)
{
case wil::FolderChangeEvent::ChangesLost: break;
case wil::FolderChangeEvent::Added: break;
case wil::FolderChangeEvent::Removed: break;
case wil::FolderChangeEvent::Modified: break;
case wil::FolderChangeEvent::RenamedOldName: break;
case wil::FolderChangeEvent::RenamedNewName: break;
});
Observe changes to the file system using the Win32 API FindFirstChangeNotificationW
#include <wil/filesystem.h>
auto watcher = wil::make_folder_watcher(folder.Path().c_str(), true, wil::allChangeEvents, []()
{
// respond
});
Get information about a file from an open handle.
auto fileBasicInfo = wil::GetFileInfo<FileBasicInfo>(fileHandle);
Create a directory including the intermediate path segments.
wil::CreateDirectoryDeepNoThrow(LR"(C:\temp\folder)");
Delete a folder including its contents and sub-folders.
wil::RemoveDirectoryRecursive(LR"(c:\temp)", RemoveDirectoryOptions::RemoveReadOnly);