gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 07:33:52 24 4
gpt4 key购买 nike

是否可以在标准 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)的情况下实现类似的事情?

最佳答案

简短的回答是:没有。

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

关于c++ - 标准 C++ 中的事务性文件保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17127823/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com