【问题标题】:Random File Size In CopyTo - C# .Net CoreCopyTo 中的随机文件大小 - C# .Net Core
【发布时间】:2019-06-04 17:43:18
【问题描述】:

我正在按照以下功能分块发送文件数据。但它的行为是随机的。

我正在尝试将块附加到同一个文件。但是每次生成随机大小的文件。

如果我为每个块分别创建文件并将其汇总(使用以下相同的函数)。它等于。但是附加没有按预期工作。我是否需要更改以下函数中的任何内容才能从块创建大文件?

private void AppendToFile(string fullPath, IFormFile content)
{
      Directory.CreateDirectory(Path.GetDirectoryName(fullPath));

      using (FileStream stream = new FileStream(fullPath, FileMode.Append, FileAccess.Write, FileShare.ReadWrite))
      {
           content.CopyTo(stream);
      }
}

【问题讨论】:

    标签: c# .net-core


    【解决方案1】:

    我猜您正在使用 FileShare 参数,因为之前遇到了有关多路访问的问题,这让我认为您正在同时上传多个块。当您使用 FileMode.Append 打开 FileStream 时,它会寻找它认为文件结尾的位置。

    所以,如果你创建文件并开始在线程 A 中写入,然后另一个块进入线程 B,线程 B 将打开文件到线程 A 已经写入的位置,比如字节 100。如果线程 A仍然需要从其块中写入更多数据,它将继续在字节 101 处写入。线程 B 也将在字节 101 处开始写入其块,因此开始覆盖线程 A 在 101 处写入的任何数据。

    您可以尝试使这些操作串行化,但由于您将它们作为上传接收,我猜您不想这样做。在这种情况下,我建议将每个块写入自己单独的“部分”文件,然后在接收并写入最后一个块时,将“部分”文件合并为一个大文件。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-27
      • 2018-11-12
      • 2016-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-18
      相关资源
      最近更新 更多