Fix std::filesystem::remove on ReFS targets (#407)

* Fix std::filesystem::remove on ReFS targets by falling back to standard delete on ERROR_NOT_SUPPORTED.

Resolves DevCom-857535.
This commit is contained in:
Billy O'Neal 2020-01-06 14:06:14 -08:00 коммит произвёл GitHub
Родитель 4d5d226a72
Коммит 94c9f9965b
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
1 изменённых файлов: 6 добавлений и 2 удалений

Просмотреть файл

@ -657,11 +657,15 @@ __std_win_error __stdcall __std_fs_get_file_id(__std_fs_file_id* const _Id, cons
} }
_Last_error = __std_win_error{GetLastError()}; _Last_error = __std_win_error{GetLastError()};
if (_Last_error != __std_win_error::_Invalid_parameter && _Last_error != __std_win_error::_Invalid_function) { switch (_Last_error) {
case __std_win_error::_Invalid_parameter: // Older Windows versions
case __std_win_error::_Invalid_function: // Windows 10 1607
case __std_win_error::_Not_supported: // POSIX delete not supported by the file system
break; // try non-POSIX delete below
default:
return {false, _Last_error}; return {false, _Last_error};
} }
// Filesystem without POSIX delete support, or older than Windows 10 RS1 version without such support:
FILE_DISPOSITION_INFO _Info{/* .Delete= */ TRUE}; FILE_DISPOSITION_INFO _Info{/* .Delete= */ TRUE};
if (_SetFileInformationByHandle(_Handle._Get(), FileDispositionInfo, &_Info, sizeof(_Info))) { if (_SetFileInformationByHandle(_Handle._Get(), FileDispositionInfo, &_Info, sizeof(_Info))) {
return {true, __std_win_error::_Success}; return {true, __std_win_error::_Success};