当前位置 : 主页 > 网络安全 > 测试自动化 >

性能 – 通过文件流取消保存文件的适当方法?

来源:互联网 收集:自由互联 发布时间:2021-06-22
我正在编写的工具负责在几个小时内下载数千个图像文件.最初,使用TIdHTTP,我会将文件放入TMemoryStream中,然后将其保存到文件中,只要没有例外.为了提高速度,我将TMemoryStream更改为TFileStr
我正在编写的工具负责在几个小时内下载数千个图像文件.最初,使用TIdHTTP,我会将文件放入TMemoryStream中,然后将其保存到文件中,只要没有例外.为了提高速度,我将TMemoryStream更改为TFileStream.

但是,现在如果找不到资源,或者导致没有实际文件的任何类型的异常,它仍然保存一个空文件.

完全可以理解,因为我只是在下载之前创建一个文件流…

FileStream:= TFileStream.Create(FileName, fmCreate);
try
  Web.Get(AURL, FileStream);
finally
  FileStream.Free;
end;

我知道如果有异常,我可以简单地删除该文件.但它似乎太草率了.我确信有一种更合适的方法可以中止这种情况.

如果有异常,我应该怎么做才能保存文件,而不改变性能(如果可能的话)?

How should I make this to not save a file if there was an exception, while not altering the performance (if at all possible)?

这通常是不可能的.错误和失败可能发生在任何步骤,如果方式,包括通过下载的部分方式.理解了这一点后,您必须接受该文件可以部分下载然后放弃.你在哪个地方存放它?

显而易见的选择是内存和文件.你不想存储到内存,它留给文件.

这将带您回到当前的解决方案.

I know I could simply delete the file if there was an exception.

这是正确的方法.这有几个变种.例如,您可能会下载到使用标志创建的临时文件,以便在关闭时排列其删除.只有下载完成后才能复制到真正的目的地.这是浏览器采用的方法.但基本的想法是下载到文件并通过整理来处理任何失败.

网友评论