simxinzi 发表于 2009-1-16 11:19:55

一个比较离谱的问题:关于AU3分割文件

我准备做一个更新程序,实现分块文件更新

我的思路是这样的:

先把大的文件拆分成若干份,比如说每10M一份,在服务器上每10M保存一份SHA1或CRC32值,相当于生成了块的快照

然后把本地的大文件100M以上的(100M以下的直接下载)用工具按同样的大小等分,放到临时文件夹中。

然后通过快照比对,找出不同的块,然后用工具下载指定块的数据,直到所有块比较或下载完毕,再进行文件合并(类似于Copy /b)

找到一文件快速拆分工具,DOS下的 Split(见附件)

这个工具可以很方便和快速的把文件拆分,例如:

有data.mpq这个文件(1024M)

用Split -a2 -b10m data.mpg data.mpg_命令拆分后被分成了100份,文件名大概是这样的

data.mpg_aa
data.mpg_ab
data.mpg_ac
....
data.mpg_az
data.mpg_ba
data.mpg_bb
data.mpg_bc
.....
data.mpg_ca
data.mpg_cb
data.mpg_cc
....

这个工具拆分文件是很快的,1G的文件拆分一般3秒就完了

于是问题出现了:

1.文件后缀名问题
我需要的后缀是类似这样的,但这个软件只能生成字母的,这个也是最快的拆分软件了
data.mpg.001
data.mpg.002
data.mpg.003
....
data.mpg.100

不知道大家有什么方法可以快速把后缀替换过来,通过重命名的方式,或者用Au3能否实现文件拆分?

2.块下载问题:
准备用FTP内核,目前只知道有个别的商业FTP控件可以实现指定块的下载,大家可否知道有别的文件块下载的方法,即用2进制方式只下载指定文件中的某部分数据流到一个临时文件

这2个问题实现了,就可以实现文件分块快速更新了,大家如果对此感兴趣的话请出出点子,如果可以实现我软件作好了就将源文件公开或给大家共享!

顽固不化 发表于 2009-1-16 12:36:04

AU3对大文件的操作比较迟钝的。不支持超大文件。关于文件改名AU3应该不在话下。
改名字源码:
$CHR="abcdefghijklmnopqrstuvwxyz"
$CNT=0
for $i=1 to 26
        For $j=1To 26
                $AB=StringMid($CHR,$i,1)&StringMid($CHR,$j,1)
                If FileExists("Data.mpg_"&$AB) Then
                        $CNT+=1
                        If $CNT<10 then $QD="00"
                        If $CNT>=10 And $CNT<100 then $QD="0"
                        if $CNT>=100 Then $QD=""
                        FileMove("Data.mpg_"&$AB,"Data.mpg."&$QD&$CNT)
                Else
                        Exit
                EndIf
        Next
Next

[ 本帖最后由 顽固不化 于 2009-1-16 13:10 编辑 ]

simxinzi 发表于 2009-1-16 12:46:29

文件改名关键是需要转化,把字母按照一定的规则转换成数字,这个能实现么?

顽固不化 发表于 2009-1-16 13:09:28

源码在2楼。注意:此源码示例中文件总数小于999哈。多了你就改一改。

[ 本帖最后由 顽固不化 于 2009-1-16 13:14 编辑 ]
页: [1]
查看完整版本: 一个比较离谱的问题:关于AU3分割文件