CopyTo-C#.Net Core中的随机文件大小

时间:2019-06-04 17:43:18

标签: c# .net-core

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

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

如果我为每个块分别创建文件并总计(使用下面的功能)。它等于。但是追加未按预期工作。我需要在以下函数中进行任何更改以从块创建大文件吗?

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);
      }
}

1 个答案:

答案 0 :(得分:1)

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

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

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