【问题标题】:Transactional File Saving in standard C++标准 C++ 中的事务文件保存
【发布时间】:2013-06-15 20:58:09
【问题描述】:

是否可以在标准 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 特定函数(即仅标准库或 boost)的情况下实现类似的事情?

【问题讨论】:

    标签: c++ winapi file-io wofstream


    【解决方案1】:

    简短的回答是:不。

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

    【讨论】:

      猜你喜欢
      • 2016-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-27
      • 2015-10-09
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      相关资源
      最近更新 更多