标准c++中的事务性文件保存
Transactional File Saving in standard C++
是否有可能在标准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特定的功能(即只是标准库或boost)?
简短的回答是:不。
长话短说:标准的文件函数只支持一组相当基本的函数。如果您需要像这样的特定功能,只有某些操作系统支持,那么您将需要使用特定于系统的功能—或者找到另一种方法来实现相同的结果(例如,使用rename而不是ReplaceFile)
相关文章:
- 无法通过头文件保存变量的值
- 是否有标准的文件保存和交换模式
- C++两次从文件保存对象读取多重继承
- 如何选择文件保存到的位置?
- 如何将文本文件保存到C 中的字符串结构
- 将文件保存到目录C
- 如何在不保存文件的情况下制作打印屏幕并将其发送到FTP服务器?我的工作代码将文件保存到HDD
- 从文件C++保存和读取双向量
- 使用 depend将对象文件保存在相同的生成文件目录中
- 在C++中创建文件时,创建的文件保存在何处
- 在 cab 应用程序卸载时将文件保存在文件夹中
- 读取.txt文件保存在内存中
- 如何将CSV文件保存为UTF-8
- 使用iostream将文件保存在路径
- 在Qt中将文件保存到网络
- 将链表写入 txt 文件(保存过程)
- 在 C++ 中将编辑过的内文件保存到输出文件时出现问题
- 将文件保存在不同的linux位置
- 多线程文件保存操作
- 文件保存期间的进度