将流保存到vibe.d中的文件

问题描述

我想将一个vibe.d流(例如HTTPClientResponse.bodyReader(类型为{{1}})保存到文件中,还要将其他潜在的vibe.d流保存到文件中,如何最好地在内存有效的情况下做到这一点没有将所有数据复制到RAM的方法

解决方法

通常,要使用HTTP客户端下载文件,可以使用vibe.inet.urltransfer软件包,该软件包提供了download便利功能,该功能执行HTTP请求,处理重定向并将最终输出存储到文件中。 / p>

download(url,file);

但是,如果要获取原始输入流(例如,在不处理重定向时),则可以使用vibe.core.file : openFile打开/创建文件作为文件流,然后对其进行写入。

要写入文件流,您有两个选择:

  1. 您直接致电file.write(otherStream)
  2. 否则,您可以使用vibe.core.stream : pipe

vibe.d urltransfer模块内部正在使用直接在write对象上调用FileStream的方法,并且建议将其直接从流中读取到写入缓冲区中,而不是在文件中使用使用pipe将使用的附加临时缓冲区。

示例:

// createTrunc creates a file if it doesn't exist and clears it if it does exist
// You might want to use readWrite or append instead.
auto fil = openFile(filename,FileMode.createTrunc);
scope(exit) fil.close();
fil.write(inputStream);