是否可以在标准C ++中实现事务性文件保存,而无需使用特定于系统的API调用,如CopyFile
,ReplaceFile
,CreateFile
等。
目前我正在执行以下操作(使用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特定功能(即只是标准库或增强版)的情况下实现类似的功能?
答案 0 :(得分:1)
简短回答是:不。
长答案:标准文件功能仅支持一组相当基本的功能。如果您需要这样的特定功能,只有某些操作系统支持,那么您将需要使用系统特定的功能 - 或者找到另一种方法来实现相同的结果(例如,使用重命名而不是ReplaceFile)