2013-06-15 2 views
0

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

ответ

1

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

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