如何在文件操作中使用交易?

时间:2012-05-30 05:22:10

标签: c# asp.net .net transactions

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

  1. 删除目录中的文件。
  2. 验证一些数据。如果数据无效,回滚
  3. 将文件上传到目录。如果上传失败回滚
  4. 提交更改。
  5. 我提出有关交易的要求是因为有时用户可能会使用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;
            }
    

3 个答案:

答案 0 :(得分:2)

我认为你只能手动执行此操作。看看Martin Fowler的UnitOfWork,你可以实现像他描述的那样

同时查看此链接可能是您的帮助

答案 1 :(得分:1)

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

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

希望它能解决你的问题。

答案 2 :(得分:0)

Windows Vista和更新的支持Transactional NTFS,这可能对您有帮助。

但实际上,你应该考虑重新编写你的逻辑 - 上传到一个临时文件,如果上传成功,只删除原始文件(并重命名tempfile)。