C# C中多个文件流的事务写入#

C# C中多个文件流的事务写入#,c#,file,file-io,transactions,transactional,C#,File,File Io,Transactions,Transactional,我应该获得具有相同扩展名的多个文件(例如,一个分为多个归档文件的归档文件:rar、r00、r01等) 我试图找到一个解决方案,如果我得到的一个文件流没有被写入,所有以前成功创建的文件都将被删除。 就像事务性文件流编写器一样 我偶然遇到了这个项目,它看起来就像我需要的一样——只是它不适用于流,而是适用于文件路径 在这一点上,我只看到两种选择: 保留一个成功写入文件的列表,如果其他文件写入失败,我将检查该列表并删除所有文件 通过FileStream将所有文件写入%TEMP%或其他文件,然后-成功写

我应该获得具有相同扩展名的多个文件(例如,一个分为多个归档文件的归档文件:rar、r00、r01等)

我试图找到一个解决方案,如果我得到的一个文件流没有被写入,所有以前成功创建的文件都将被删除。 就像事务性文件流编写器一样

我偶然遇到了这个项目,它看起来就像我需要的一样——只是它不适用于流,而是适用于文件路径

在这一点上,我只看到两种选择:

  • 保留一个成功写入文件的列表,如果其他文件写入失败,我将检查该列表并删除所有文件
  • 通过FileStream将所有文件写入%TEMP%或其他文件,然后-成功写入所有文件后,我将使用事务文件管理器(如上所述)将文件移动到所需位置
需要注意的是,我必须使用streams

你认为这两个选项中哪一个更好? 有没有更好的建议或想法

谢谢


编辑:

我遇到的另一个选项是使用,如下所示。 对此有何想法?

我最终使用了AlphaFS。 使用它就像在示例中一样。 它工作完美,完全符合我的需要


谢谢您的评论。

您看过事务性文件管理器的源代码了吗?它实际上首先使用File.Copy将原始文件复制到%TEMP%,然后对原始文件(AppendAllText、WriteAllBytes等)进行操作。调用RollBack时,它只会将%TEMP%处的文件复制回其原始位置。就像您在选项2中计划的那样。请注意-我认为最好的选择是在%TEMP%下创建一个具有唯一名称(timestamp+newguid可以)的目录,然后在该目录下写入所有文件。如果所有文件操作都成功,(并且流被释放、关闭),则将目录移动到其最终位置。如果任何文件失败(流被释放、关闭),请使用directory.delete删除目录。请尝试一些操作。你的问题“过于宽泛”或“主要基于观点”,这取决于你在答案中寻找的细节。你会学到很多关于你所看到的任何一个选项是否对你有效的知识,如果是的话,哪一个看起来最适合你的场景。如果在处理这个问题的过程中,您遇到了一个特定的问题,请随意发布一个问题,该问题可靠地再现了这个问题,并精确解释了代码的作用以及它与您想要的不同之处。