我所知道的方法:
1、分成几个小的文件,然后再合并。
2、写入一个文件,通过移动写入位置来写入对应的数据。
方法1的缺点是生成多个临时文件,方法2的缺点但下载中断时文件的大小于实际写入的数据不相符!
而FlashGet下载后的文件只有一个文件,而且下载多少数据就显示多少!
请高手指点!
谢! 问题点数:20、回复次数:11
1 楼DentistryDoctor(不在无聊中无奈,就在沉默中变态)回复于 2005-08-26 10:54:15 得分 0
同步!
2 楼hamimelon(夜过留香)回复于 2005-08-26 11:38:23 得分 0
同时写的话,要用临界区
3 楼noneone(noneone)回复于 2005-08-26 17:03:54 得分 0
一种土办法,建立一个filemap,然后就可以当成多线程访问同一块内存来处理了,需要记录一下位置信息
4 楼fenjin(奋进)回复于 2005-08-26 21:51:52 得分 0
能否给提供点代码学习学习!
同步是什么意思?
5 楼mynamelj(夏娃的诱惑)回复于 2005-08-28 14:47:17 得分 0
FlashGet應該不是多線程寫文件﹐它是多線程下載文件﹐然后放入一個內存區﹐再寫入文件中。
其實它并不需利用多個線程來寫文件﹐只要文件下載到了內存區中寫文件的速度是相當快的。
6 楼jiangsheng(蒋晟.Net[MVP])回复于 2005-08-29 00:09:33 得分 0
每个线程访问的文件区域固定的话可以用方法2,否则还是用方法1
7 楼cfgm(风色幻想)回复于 2006-02-13 17:41:05 得分 0
建立内存缓冲区,比如8M,多线程共用,当满了以后,就有另一个检测线程负责转移到硬盘文件中。
迅雷似乎是这样做的。这样的好处是下载与文件大小无关,无论是多大的文件,都只用固定的内存缓冲区。
8 楼cfgm(风色幻想)回复于 2006-02-14 09:33:30 得分 0
这里有一个例子,我刚写的一个
http://guoxin.org/home/guoxin/blog/blogView.asp?blogId=225
提供试用版下载
9 楼striking(庸人自扰)回复于 2006-02-15 09:22:38 得分 0
flashget 下载的时候先生成文件, 然后用2
10 楼xrenwu(卖火柴的大男孩)回复于 2006-02-17 14:21:35 得分 0
好贴,我顶
11 楼gao_ming77(小明)回复于 2006-02-17 14:27:20 得分 0
先生成一个文件,里面填充占位数据。然后多个线程,分段利用完成端口方式(WriteFileEx)写文件。