c#确保所有操作完成或none

c# ensure all operations to complete or none

我有以下代码:

File.Copy(pathSource, pathDestination);   //copy file
ID3v2TagToDB(pathSource, pathDestination); //read his tags and save them to DB
ID3v2TagToTXT(pathSource, pathDestination); //read his tags and save them to txt
dgv.Rows[chosen[i]].DefaultCellStyle.BackColor = Color.GreenYellow; //color green datagridview row if copy and read successfull

我要确保每个操作都成功。如果其中任何一个失败,我需要回滚所有以前的。

此外,警告用户发生的错误以及发生的操作。

没有内置的方法可以做到这一点。您将需要考虑您的应用程序做什么,并提供撤消每个操作的方法。

例如,您可以删除复制的文件,可以删除插入的行,同样也可以删除写入文件的文本。

研究异常处理

我建议您实施 .NET 两阶段提交资源管理器。当 DTC 组件调用逻辑来回滚您的更改时,您的 RM 可以为您对文件系统所做的每个更改保存一个备份文件。您可以恢复之前制作的备份文件。

Check out this documentation

使用 TxF 和 KTM 会帮助您 here and here,因为已在 Vista+ windows 版本中实现。

TxF(事务文件系统)适用于 NTFS 格式。 Win32 API 合同未更改,这对您来说是个不错的选择。因为通过 .NET Framework 公开的所有 API IO 都是相同的。您只需直接调用几个 Win32 API,您就可以享受 Windows 中包含的这项新功能的所有好处。使用 DTC 也将允许您跨文件系统和数据库执行事务性工作。因此,如果发生错误,所有更改都会在数据库和文件系统中回滚。