3

我的程序需要将一些文件操作视为一个单元,一个案例中的一些重要步骤是:

  1. 删除目录中的文件。
  2. 验证一些数据。如果数据无效,则回滚
  3. 将文件上传到目录。如果上传失败,则回滚
  4. 提交更改。

我提出这个关于交易的要求是因为有时用户可能使用 VPN 访问我的网站,VPN 连接可能非常不稳定。

如果第 3 步失败,第 1 个文件和新上传的文件都将丢失。

我的一些代码:

        DeleteTheOlderDT(path, FileName);

        this.fuTemplateName.SaveAs(path + FileName);
        _t.FileName = FileName;

        if (!System.IO.File.Exists(path + FileName))
        {
            ArrayList ItemList = new ArrayList();
            ItemList.Add("Uploading failed, please upload again!");
            btlError.DataSource = ItemList;
            btlError.DataBind();
            _t.FileName = "";
            return;
        }
4

3 回答 3

2

我认为您只能手动执行此操作。看看Martin Fowler 的UnitOfWork,你可以实现他所描述的一些事情

还要检查这个链接也许对你有帮助

于 2012-05-30T05:32:49.190 回答
1

我从来没有尝试过文件系统,但是代码项目上有很好的文章。

请看一下http://www.codeproject.com/Articles/31270/A-Transactional-Repository-Implementation-in-NET

希望它能解决您的问题。

于 2012-05-30T05:30:32.313 回答
1

Windows Vista 和更新版本支持Transactional NTFS,这可能会对您有所帮助。

但实际上,您应该考虑重新设计您的逻辑 - 上传到临时文件,并且仅在上传成功时删除原始文件(并重命名临时文件)。

于 2012-05-30T07:38:04.573 回答