HttpContent.CopyToAsync 对于大文件

HttpContent.CopyToAsync for large files

祝你们一切顺利!

假设我正在从 HTTP API 端点下载文件并且文件大小非常大。 API returns application/octet-streamHttpContent 在我的下载方法中。

当我使用

using (FileStream fs = new FileStrean(somepath, FileMode.Create))
{
    // this operation takes a few seconds to write to disk
    await httpContent.CopyToAsync(fs); 
}

一旦执行了 using 语句 - 我看到在给定路径的文件系统上创建的文件,虽然此时它是 0 KB,但是当 CopyToAsync() 完成执行时,文件大小为预期。

问题是有另一项服务 运行 不断轮询保存上述文件的文件夹,并且经常会拾取 0 KB 的文件,有时甚至是部分文件(这似乎是我使用 WriteAsync(bytes[]).

有没有办法在文件准备好保存之前不将文件保存在文件系统上...?

我能想到的一个奇怪的解决方法是:

using (var memStream = new MemoryStream())
{
    await httpContent.CopyToAsync(memStream);
    using (FileStream file = new FileStream(destFilePath, FileMode.Create, FileAccess.Write))
    {
        memStream.Position = 0;
        await memStream.CopyToAsync(file);
    }
}

我将 HttpContent 复制到 MemoryStream,然后将 memorystream 复制到 FileStream...这似乎有效,但会消耗内存...

我能想到的另一个解决方法是先将文件保存到辅助位置,操作完成后,将文件移至主文件夹。

提前致谢,

强尼

我最终将文件保存到一个临时文件夹中,操作完成后,我将下载的文件移动到我的主文件夹中。由于 Move 是原子的,所以我不再有这个问题了。

谢谢评论的人!