问题遇到的现象和发生背景
我尝试在Delphi里面使用多线程制作下载工具。
过程:
1.首先获取网络上的文件大小【已成功】
2.然后再将网络文件按照(用户)设置的最大线程进行分段【已成功】
3.用TIdHttp的一个下载Range对文件进行下载【已成功】
4.在多线程里面,调用Range文件下载,进行筛选,将其命名【文件名-线程执行数.tmp】并挨个存放至%用户Temp%/文件夹/下、【就这一步未完成】
5.将下载下来的所有tmp进行合并,最终将合并后的流SaveToPath到(用户)指定目录下。【已完成】
6.所有线程退出,回归窗口。【这个等到第4步完成之后再做】
目的:完成上述步骤并成功将文件下载下来。
问题相关代码,请勿粘贴截图
https://paste.ubuntu.com/p/PmvVWZvzhG/
这里已经是我的所有能用的代码了,请各位好好看看吧。如果还需要任何别的代码,我会将其粘贴的。
运行结果及报错内容
运行结果:在进行TThread.Sleep之后,依旧会出现文件复写的问题。简单来说,就是有些tmp文件被跳过了。例如从1直接到4。经过查证是1下载完之后,4主动先执行完所有步骤,然后将4文件下载下来,然后2和3将会按照自增也会来到4线程,这就导致了4文件被下载了3次。而且是覆盖重写的4文件。
我的解答思路和尝试过的方法
尝试过将StringStream替换成FileString,但还是不行。
我想要达到的结果
成功进行多线程下载。使用TTask的