0

、などCopyFileのシステム固有の API 呼び出しを使用せずに、標準 C++ でトランザクション ファイルの保存を実装することは可能ですか?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 固有の関数 (つまり、標準ライブラリまたはブーストのみ) を使用せずに同様のことを達成する方法はありますか?

4

1 に答える 1

1

短い答えは:いいえ。

長い答え: 標準のファイル関数は、かなり基本的な関数セットのみをサポートします。一部のオペレーティング システムでのみサポートされているこのような特定の機能が必要な場合は、システム固有の機能を使用するか、同じ結果を得る別の方法を見つける必要があります (たとえば、ReplaceFile の代わりに名前の変更を使用します)。

于 2013-06-15T22:09:10.233 に答える