Можно ли реализовать транзакционное сохранения файла в стандартном C++ без использования системы конкретных вызовов API, как CopyFile
, ReplaceFile
, CreateFile
и т.д.транзакционных файлов Сохранение в стандарте C++
В настоящее время я делаю это следующим образом (с использованием Win32 API конкретных код):
void TransactionalFileSave(const std::wstring& szFileName)
{
std::wofstream fileTemp(L"temp");
for(auto data : vecData)
{
fileTemp << data;
}
fileTemp.close();
CloseHandle(CreateFile(szFileName.c_str(), (GENERIC_READ | GENERIC_WRITE), (FILE_SHARE_READ | FILE_SHARE_WRITE), NULL, CREATE_NEW, FILE_ATTRIBUTE_NORMAL, NULL));
CloseHandle(CreateFile(L"temp_backup", GENERIC_ALL, (FILE_SHARE_READ | FILE_SHARE_WRITE), NULL, CREATE_NEW, FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_TEMPORARY, NULL));
ReplaceFile(szFileName.c_str(), L"temp", L"temp_backup", REPLACEFILE_WRITE_THROUGH, NULL, NULL);
}
есть ли способ, которым я мог бы достичь такой же вещи без использования Win32 API конкретных функций (то есть только стандартная библиотека или повышение)?