diff --git a/stl/src/filesys.cpp b/stl/src/filesys.cpp index 9a68da5480d..d78049bbb62 100644 --- a/stl/src/filesys.cpp +++ b/stl/src/filesys.cpp @@ -416,16 +416,19 @@ _FS_DLL int __CLRCALL_PURE_OR_CDECL _Rename(const wchar_t* _Fname1, const wchar_ } _FS_DLL int __CLRCALL_PURE_OR_CDECL _Resize(const wchar_t* _Fname, uintmax_t _Newsize) { // change file size - bool _Ok = false; HANDLE _Handle = _FilesysOpenFile(_Fname, FILE_GENERIC_WRITE, 0); - if (_Handle != INVALID_HANDLE_VALUE) { // set file pointer to new size and trim - LARGE_INTEGER _Large; - _Large.QuadPart = _Newsize; - _Ok = SetFilePointerEx(_Handle, _Large, nullptr, FILE_BEGIN) != 0 && SetEndOfFile(_Handle) != 0; - CloseHandle(_Handle); + if (_Handle == INVALID_HANDLE_VALUE) { + return GetLastError(); } + + FILE_END_OF_FILE_INFO _File_info; + _File_info.EndOfFile.QuadPart = static_cast(_Newsize); + + const auto _Ok = SetFileInformationByHandle(_Handle, FileEndOfFileInfo, &_File_info, sizeof(_File_info)); + + CloseHandle(_Handle); return _Ok ? 0 : GetLastError(); } diff --git a/stl/src/filesystem.cpp b/stl/src/filesystem.cpp index 6ec69b5988e..986ca9098a8 100644 --- a/stl/src/filesystem.cpp +++ b/stl/src/filesystem.cpp @@ -693,13 +693,14 @@ _Success_(return == __std_win_error::_Success) __std_win_error return _Err; } - LARGE_INTEGER _Large; - _Large.QuadPart = _New_size; - if (SetFilePointerEx(_Handle._Get(), _Large, nullptr, FILE_BEGIN) == 0 || SetEndOfFile(_Handle._Get()) == 0) { - return __std_win_error{GetLastError()}; + FILE_END_OF_FILE_INFO _File_info; + _File_info.EndOfFile.QuadPart = static_cast(_New_size); + + if (SetFileInformationByHandle(_Handle._Get(), FileEndOfFileInfo, &_File_info, sizeof(_File_info))) { + return __std_win_error::_Success; } - return __std_win_error::_Success; + return __std_win_error{GetLastError()}; } [[nodiscard]] __std_win_error __stdcall __std_fs_space(_In_z_ const wchar_t* const _Target,