winapi — сохранение транзакционных файлов в стандартном переполнении стека

Возможно ли реализовать транзакционное сохранение файлов в стандарте C ++ без использования системных вызовов API, таких как CopyFile, ReplaceFile, CreateFile и т.п.

В настоящее время я делаю это следующим образом (используя специальный код 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 (то есть просто стандартную библиотеку или повышение)?

0

Решение

Краткий ответ: нет.

Длинный ответ: стандартные файловые функции поддерживают только довольно базовый набор функций. Если вам нужна определенная функциональность, подобная этой, которая поддерживается только некоторыми операционными системами, то вам нужно будет использовать системные функциональные возможности — или найти другой способ достижения того же результата (например, используя переименование вместо ReplaceFile)

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]