【问题标题】:(ObjectDisposedException) cannot upload FormFile to disk space [closed](ObjectDisposedException)无法将 FormFile 上传到磁盘空间 [关闭]
【发布时间】:2020-07-03 16:29:24
【问题描述】:

我需要对方法进行单元测试

Here I instantiate new FormFile from disk

这里我使用静态方法,带有文件和文件夹路径

var id= await ContentSaver.Save(file, path + "\\");

Than I try to save that file back to disk

VS 抛出异常“System.ObjectDisposedException:无法访问已关闭的文件”。 如何解决?

This is stacktrace

【问题讨论】:

  • 请不要发布代码/错误/堆栈跟踪的图像。它们不能被搜索或复制/粘贴。这些链接可能会随着时间的推移而失效,这可能会使您的问题在未来变得毫无意义。所有关于堆栈溢出的问题都应该是自包含的。此外,作为询问者,您直接复制/粘贴代码要容易得多,然后肯定是截屏,上传然后链接到它们。最后,它表现出对您希望在自己的时间解决您的问题的人的不尊重,实际上是要求他们做额外的工作以获取所有事实。
  • 嗯,下次我会记住的。

标签: c# asp.net .net asp.net-core .net-core


【解决方案1】:

第一个代码部分的答案 (https://i.stack.imgur.com/ktjip.png)。您在使用范围内创建流并立即处理它。为避免它将文件内容复制到 MemoryStream 中(不需要被废弃)并设置为 FormFile 的源

        IFormFile formFile;
        using (var fstream = new FileStream("path", FileMode.Open))
        {
            var mstream = new MemoryStream();
            fstream.CopyTo(mstream);
            formFile = new FormFile(mstream, 0, mstream.Length, null, mstream.Name);
        }
        // here fstream is disposed, but not mstream, and you can use your FormFile instance
        // MemoryStream does not need to be disposed explicitly, it do not posess any OS specific handlers, GC is enought.

【讨论】:

  • 你能给我看一个小例子吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-08
  • 2010-09-24
  • 2019-12-27
  • 2022-10-21
  • 1970-01-01
  • 2019-02-25
相关资源
最近更新 更多