【问题标题】:C++ ofstream delete and cleanupC++ ofstream 删除和清理
【发布时间】:2013-02-11 17:21:23
【问题描述】:

我正在编写一个有时必须清理的 C++ ofstream - 我正在写入的文件应该被删除,并且类应该被删除和清理。

怎么样? (除了关闭它并按名称删除它)。

(至少该文件不应该以打开它的预期位置和文件名存在 - tempfile 目录可以)

【问题讨论】:

  • 您无法安全地删除/移动仍然打开的文件。
  • 我的意思是,在我关闭之前,该文件可能有一个临时名称(在我的 Visual C++ 版本中似乎就是这样)。如果我能把它留在那里,那没关系。

标签: c++ stl standard-library ofstream


【解决方案1】:

据我所知,没有其他办法。关闭文件并使用 remove 及其名称。

这可能最好由某种 RAII 类来处理; 我经常使用 OutputFile 类,它隐式转换 到std::ostream&amp;(用于输出)。构造函数取名字 一个文件;有一个 commit 函数可以关闭文件, 但是如果析构函数在commit之前被调用,它不仅 关闭文件,但将其删除。同样,有一个 UpdateFile 类,打开 <i>filename</i>.newcommit 然后重命名 <i>filename</i><i>filename</i>.bak (删除任何以前存在的具有该名称的文件),以及 将<i>filename</i>.new 移动到 <i>filename</i>。析构函数删除 <i>filename</i>.new。 (一个变体检查是否 commit 中的新内容与旧内容不同,因此 如果内容没有变化,文件时间戳不会改变。)

【讨论】:

    猜你喜欢
    • 2011-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多