标准C ++中的事务性文件保存

时间:2013-06-15 20:58:10

标签: c++ winapi file-io wofstream

是否可以在标准C ++中实现事务性文件保存,而无需使用特定于系统的API调用,如CopyFileReplaceFileCreateFile等。

目前我正在执行以下操作(使用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 个答案:

答案 0 :(得分:1)

简短回答是:不。

长答案:标准文件功能仅支持一组相当基本的功能。如果您需要这样的特定功能,只有某些操作系统支持,那么您将需要使用系统特定的功能 - 或者找到另一种方法来实现相同的结果(例如,使用重命名而不是ReplaceFile)