0

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

目前我正在这样做(使用 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 特定函数(即标准库或 boost)的情况下实现类似的事情?

4

1 回答 1

1

简短的回答是:不。

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

于 2013-06-15T22:09:10.233 回答