gpt4 book ai didi

performance - 通过文件流取消保存文件的适当方法?

转载 作者:行者123 更新时间:2023-12-03 15:19:04 25 4
gpt4 key购买 nike

我正在编写的一个工具负责在几个小时内下载数千个图像文件。最初,使用TIdHTTP,我会将文件Get放入TMemoryStream中,然后将其保存到文件中,只要存在也不异常(exception)。为了提高速度,我将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.

这才是正确的做法。这有一些变体。例如,您可以下载到一个临时文件,该文件是使用标志创建的,以便在关闭时安排其删除。仅当下载完成后,您才可以复制到真正的目的地。这是浏览器采用的方法。但基本思想是下载到文件并通过整理来处理任何失败。

关于performance - 通过文件流取消保存文件的适当方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46859465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com