我正在编写的工具负责在几个小时内下载数千个图像文件.最初,使用TIdHTTP,我会将文件放入TMemoryStream中,然后将其保存到文件中,只要没有例外.为了提高速度,我将TMemoryStream更改为TFileStr
但是,现在如果找不到资源,或者导致没有实际文件的任何类型的异常,它仍然保存一个空文件.
完全可以理解,因为我只是在下载之前创建一个文件流…
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.
这是正确的方法.这有几个变种.例如,您可能会下载到使用标志创建的临时文件,以便在关闭时排列其删除.只有下载完成后才能复制到真正的目的地.这是浏览器采用的方法.但基本的想法是下载到文件并通过整理来处理任何失败.