Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
CopyTo-C#.Net内核中的随机文件大小_C#_.net Core - Fatal编程技术网

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

CopyTo-C#.Net内核中的随机文件大小,c#,.net-core,C#,.net Core,我正在按照以下函数发送分块的文件数据。但它的行为是随机的 我试图将块附加到同一个文件中。但每次生成的文件大小都是随机的 如果我为每个区块分别创建文件,并将其合计(使用下面相同的函数)。它等于。但追加并没有像预期的那样起作用。我是否需要更改以下函数中的任何内容以从块创建大文件 private void AppendToFile(string fullPath, IFormFile content) { Directory.CreateDirectory(Path.GetDirector

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

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

如果我为每个区块分别创建文件,并将其合计(使用下面相同的函数)。它等于。但追加并没有像预期的那样起作用。我是否需要更改以下函数中的任何内容以从块创建大文件

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

我猜您使用FileShare参数是因为之前遇到了一个关于多重访问的问题,这使我认为您正在同时上载多个块。当您使用FileMode.Append打开文件流时,它会查找它认为文件结尾所在的位置

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

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