如果CFile :: Write抛出异常会发生什么?

时间:2008-12-01 02:54:09

标签: c++ exception cfile

假设写操作在中途抛出异常。是否有任何数据写入文件,或者文件中没有数据?

2 个答案:

答案 0 :(得分:1)

由于您不了解CFile的内部(或者不应该,如果它被正确封装),您需要依赖API的“合同”。换句话说,除非文档特别告诉您在某些情况下会发生什么,否则您不能依赖它。

即使您拥有源代码并且可以弄清楚, API规范是合同,任何未指定的内容都可以随时更改。这就是为什么一些软件开发人员对发布内部组件持谨慎态度的一个原因,因为它可以被视为锁定它们以永久支持它。

如果您确实希望确保您的文件在异常后处于已知状态,则需要围绕该行为进行编码。这可能是这样的:

  • 在程序启动时备份文件(简单);或
  • 在每次保存操作之前备份它(仍然相对简单);或
  • 在任何写操作之前备份它(复杂和缓慢)。

答案 1 :(得分:0)

简短回答:除非在写入操作开始时磁盘已满,否则很可能会将某些数据写入文件。

更长的答案:它将取决于从Write调用中抛出的CFileException。

http://msdn.microsoft.com/en-us/library/as5cs056(VS.80).aspx

相关问题