2013-02-26 603 views
1

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

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

(至少是文件不应该与它被打开了预期的位置和文件名存在 - 临时文件目录可能是OK)

+1

不能安全地删除/移动文件仍然是开放的。 – us2012 2013-02-26 10:01:44

+0

我的意思是,该文件可能有一个临时名称,直到我关闭(这似乎是我的Visual C++版本中的那种方式)。如果我可以让它离开它,那就没问题。 – user1987442 2013-02-26 13:42:20

回答

1

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

这可能是最好的处理某种RAII类; 我经常使用OutputFile类,它隐式地将 转换为std::ostream&(用于输出)。构造函数采用文件名称 ;有一个commit函数关闭文件, 但如果在commit之前调用析构函数,则不仅 关闭该文件,而是删除它。类似地,有一个 UpdateFile类,这将打开 filename.newcommit然后重命名 filenamefilename.bak (删除与该名称的任何先前存在的文件),和 移动filename.newfilename。破坏者删除 filename.new。 (A变种检查是否 新的内容是从旧的不同之处commit,所以,如果有在内容没有变化 文件的时间戳不会改变。)