们来做个文件分割程序 这个程序网上遍地都是,所以我们就从这个简单的东西入手 不要说已经有了就不用做,关键是你没有,你没有做过! 通过做这个程序来锻炼一下自己!
用途:一个文件太大,用u盘装不下,或者上传时有的对大小有限制,总而言之,这个东西有用才有人做!
前期准备:把一个文件分成规定的大小,在这里可以自定义每个分割的大小,也可以规定分割 的份数,在这里我们要学习一下有关文件操作相关的语句 我体会,文件这一章放在后面讲,并不是因为它难,我在真正开始做的时候就是从 文件这个开始的,一个学dos编程的人必须对dos系统有所了解,一定要对路径这个概论 很清楚,目前微软的操作系统在文件的管理上都是这个东西! (1).OPEN 语句 格式:OPEN <文件名> FOR <读写方式> AS#<文件号> <读写方式>: 这里我们只用二进制方式BINARY <文件号>:即文件缓冲区号,每一个文件都要指定一个不同的文件号(1~225); 说明: 以BINARY方式打开已存在的文件,指针指向首记录; (2)CLOSE语句 关闭已用的文件 CLOSE [#<文件号1>][,#<文件号2>]…… 关闭由文件号指定的文件缓冲区,将内容存盘,如不指定文件号,则关闭所有已打开的文件; (3)、GET#语句 格式:GET #<文件号> [,<地址>][,<记录变量>] 功能: 用于从文件中读一个指定地址的记录,赋给一个记录变量。 (4)、PUT#语句 格式:PUT #<文件号> [,<地址>][,<记录变量>] 功能: 将一个记录变量的内容写到指定地址的记录中去 (5)SEEK语句 格式:SEEK#<文件号>,<字节位置> 把指针移动指定地方 (6)LOF语句 格式:LOF<文件号> 获得文件的大小! (7)EOF语句 格式:EOF<文件号> 判断文件是否到最后!
积累了相关知识后我们来做下面的程序 先要得到一个要分割的文件名,用INPUT语句,或者自己指定一个都可以 用 INPUT filename$ 或者 filename$ = "c:\MP3\2002.mp3" 获得文件名后用二进制方式打开它 OPEN filename$ FOR BINARY AS #1 用LOF语句可以得到文件的长度,大家可以先是是看,如果为0,那么可以判断这个文件不存在!
PRINT "这个文件大小为: ";LOF(1) if lof(1)=0 then PRINT "没有这个文件" 在就是要确定要分割的大小了,这里,我用份数来确定要分割的大小,当然这个在使用中是不方便的,这里让大家自己去想想看!我只是给个思路 x = 10 '在这里我把这个文件分成10份 x1 = INT(LOF(1) / x) '得到每份的长度! 如果长度要自己输入来确定那么份数的就不可能是10份,用这个公式x=INT(LOF(1) / x1) 用两个循环来做分割,第一个循环是份数,第二个循环是每份的大小 FOR i = 1 TO x file$ = LTRIM$(STR$(i)) '自动获得分割后的文件名 OPEN file$ FOR BINARY AS #2 FOR i1 = 1 TO x1 LOCATE 10, 10: PRINT i, i1 IF EOF(1) THEN PRINT "File Cut ok!!!!": END GET #1, , r% '从要分割的文件读 PUT #2, , r% '写入要分割的文件 NEXT i1 CLOSE #2 NEXT i
现在我们把整个程序从新看一遍 cls INPUT filename$ OPEN filename$ FOR BINARY AS #1 IF LOF(1)=0 THEN END x = 10 x1 = INT(LOF(1) / x) FOR i = 1 TO x file$ = LTRIM$(STR$(i)) OPEN file$ FOR BINARY AS #2 FOR i1 = 1 TO x1 LOCATE 10, 10: PRINT i, i1 IF EOF(1) THEN PRINT "File Cut ok!!!!": END GET #1, , r% PUT #2, , r% NEXT i1 CLOSE #2 NEXT i 在这里如果你要分割的是一个很大的文件,比如要分割一个mp3,可能得4\5分钟! 怎么半呢? r%这个变量是一个整数,每次读写只有两个字节,当然慢,我们可以用字符变量来读写 例如R$=SPACE$(512)每次可以读写512个字节,如果用R$=SPACE$(1024)可以每次读写1024个字节,当然也可以只读写一个字节! 我丢了个砖头,剩下的有兴趣的自己去弄吧! 别只是做题目! 当然做题目也没有错! 比如有个三角函数,你可以用它来确定坐标来做一个点的运动,这里就需要数学知识了,凡是动画得要这个东西! 别的...我看不会用到!
|
评论