删除 boost::filesystem 创建的 tmpfile 的优雅方法是什么?
What is the elegant way to delete tmpfile created by boost::filesystem?
我有一个代码片段
if (!boost::filesystem::exists(tempDir)) {
boost::filesystem::create_directories(tempDir);
}
auto path = tempDir / boost::filesystem::unique_path("gfbfv1-%%%%-old");
do_something_maythrow(path);
remove(path);
即使 do_something_maythrow
抛出,我如何确保始终删除路径?
我应该写一个 FileDeleter
来接受一个路径并在利用所谓的 RAII
概念的析构函数上删除该路径还是有现有的解决方案?
Should I write a FileDeleter which takes a path and remove that path on destructor which utilize the so-called RAII concept
这是一个比较合理的方案。小心处理删除可能引发的任何异常,因为您不想从析构函数中抛出,尤其是从因抛出异常而正在执行的析构函数中抛出。
但是,如果这不是通常需要的结构,因此不需要可重用的解决方案,那么一个简单的临时替代方法是使用 ScopeExit,也称为作用域防护。
我有一个代码片段
if (!boost::filesystem::exists(tempDir)) {
boost::filesystem::create_directories(tempDir);
}
auto path = tempDir / boost::filesystem::unique_path("gfbfv1-%%%%-old");
do_something_maythrow(path);
remove(path);
即使 do_something_maythrow
抛出,我如何确保始终删除路径?
我应该写一个 FileDeleter
来接受一个路径并在利用所谓的 RAII
概念的析构函数上删除该路径还是有现有的解决方案?
Should I write a FileDeleter which takes a path and remove that path on destructor which utilize the so-called RAII concept
这是一个比较合理的方案。小心处理删除可能引发的任何异常,因为您不想从析构函数中抛出,尤其是从因抛出异常而正在执行的析构函数中抛出。
但是,如果这不是通常需要的结构,因此不需要可重用的解决方案,那么一个简单的临时替代方法是使用 ScopeExit,也称为作用域防护。