C++ 如果CFile::Write引发异常会发生什么?

C++ 如果CFile::Write引发异常会发生什么?,c++,exception,cfile,C++,Exception,Cfile,假设写操作中途抛出异常。文件中是否有数据写入,或者没有数据写入?简短回答:很可能会将一些数据写入文件,除非在写入操作开始时磁盘已满 更长的回答:这将取决于写入调用抛出的CFileException 简短回答:很可能会将某些数据写入文件,除非在写入操作开始时磁盘已满 更长的回答:这将取决于写入调用抛出的CFileException 由于您无法查看CFile的内部结构(如果正确封装,则不应查看),因此您需要依赖API的“契约”。换句话说,除非文档明确告诉您在某些情况下会发生什么,否则您不能依赖它 即

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

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

更长的回答:这将取决于写入调用抛出的CFileException


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

更长的回答:这将取决于写入调用抛出的CFileException


由于您无法查看CFile的内部结构(如果正确封装,则不应查看),因此您需要依赖API的“契约”。换句话说,除非文档明确告诉您在某些情况下会发生什么,否则您不能依赖它

即使您有源代码并且能够找到它,API规范是合同,任何未指定的内容都可以随时更改。这就是为什么一些软件开发人员对发布内部构件持谨慎态度的一个原因,因为这样可以看出,他们将永远支持内部构件

如果确实希望确保文件在异常发生后处于已知状态,则需要围绕行为编写代码。这可能类似于:

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

由于您无法查看CFile的内部结构(如果正确封装,则不应查看),因此您需要依赖API的“契约”。换句话说,除非文档明确告诉您在某些情况下会发生什么,否则您不能依赖它

即使您有源代码并且能够找到它,API规范是合同,任何未指定的内容都可以随时更改。这就是为什么一些软件开发人员对发布内部构件持谨慎态度的一个原因,因为这样可以看出,他们将永远支持内部构件

如果确实希望确保文件在异常发生后处于已知状态,则需要围绕行为编写代码。这可能类似于:

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