【问题标题】:stream.CopyTo - file empty. asp.netstream.CopyTo - 文件为空。网
【发布时间】:2012-03-10 02:40:20
【问题描述】:

我正在使用此代码保存上传的图片:

using (var fileStream = File.Create(savePath))
{
   stream.CopyTo(fileStream);
}

当图像保存到其目标文件夹时,它是空的,0 kb。这里可能有什么问题?我在复制之前检查了stream.Length,它不是空的。

【问题讨论】:

  • 我们可以在您加载原始流的位置查看您的代码吗?另外,尝试插入行 stream.Seek(0, SeekOrigin.Begin);就在您的副本之前,以确保您位于原始流的开头。

标签: c# asp.net filestream


【解决方案1】:

您的代码没有任何问题。你说“我在复制之前检查了 stream.Length 并且它不是空的”这一事实让我想知道复制之前的 stream 位置

如果您已经使用过一次源流,那么尽管流的长度不是零,但它的位置可能在流的末尾 - 所以没有什么可以复制的。

如果流是可搜索的(它将用于MemoryStreamFileStream 和许多其他),请尝试放置

stream.Position = 0

就在复制之前。这会将流位置重置为开头,这意味着您的代码将复制整个流。

【讨论】:

  • 你每天都会学到新东西!确实如此。非常感谢! :)
【解决方案2】:

我建议将以下内容放在CopyTo() 之前

fileStream.Position = 0

请确保在此之后使用Flush(),以避免复制后出现空文件。

fileStream.Flush()

【讨论】:

    【解决方案3】:

    在将我的项目从 .NET Core 1 迁移到 2.2 后,我开始遇到这个问题。

    我通过将文件流的Position 设置为零来解决此问题。

    using (var fileStream = new FileStream(savePath, FileMode.Create))
    {
        fileStream.Position = 0;
        await imageFile.CopyToAsync(fileStream);
    }
    

    【讨论】:

      猜你喜欢
      • 2020-11-04
      • 2012-05-26
      • 2012-08-01
      • 2012-05-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-05
      相关资源
      最近更新 更多