- Private Sub Command1_Click() 注释:浏览选择文件
- Cog1.FileName = “" 注释:清空过期文件名称
- Cog1.Filter =“vcd影碟文件(*.dat)|*.dat" 注释:只保留影碟文件
- Cog1.ShowOpen 注释:执行打开操作
- If Cog1.FileName <> "" Then 注释:如果放弃就忽略操作
- Text1.Text = Cog1.FileName 注释:得到被截取文件名
- Label6.Caption = CInt(FileLen(Text1.Text) / 2 ^ 20)
- 注释:将文件长度转化为兆字节
- End If
- End Sub
- Private Sub Command2_Click() 注释:保存为
- If Text1.Text = “" Then
- 注释:如果未选定影音文件就拒绝操作,显示提示信息
- MsgBox “请首先选择一个被截取的文件!", vbOKOnly + vbExclamation
- Exit Sub 注释:中断操作
- End If
- Cog1.FileName = “"
- Cog1.ShowSave
- If Cog1.FileName <> “" Then
- Text4.Text = Cog1.FileName 注释:保存路径名称
- End If
- End Sub
- Private Sub Command3_Click() 注释:开始截取操作
- Dim err_descr As String
- If Text1.Text = “" Or Text2.Text = “" Or Text3.Text = “" Or Text4.Text = “" Then
- 注释:再次验证参数正确性
- MsgBox “请依次输入正确的信息,不要有所遗漏!", vbOKOnly + vbExclamation
- Exit Sub 注释:如果参数不完整忽略操作
- End If
- If Not jieQU(Text1.Text, Text2.Text, Text3.Text, Text4.Text) Then
- 注释:执行截取失败
- MsgBox “红箭提示信息:" & err_descr, vbOKOnly + vbExclamation
- 注释:返回错误信息
- Else 注释:执行截取成功
- MsgBox“红箭提示信息:文件截取操作已经圆满完成!", vbOKOnly + vbExclamation
- End If
- End Sub
- Private Sub Form_Load()
- Me.Caption = App.Title
- Me.Left = (Screen.Width - Me.Width) / 2
- Me.Top = (Screen.Height - Me.Height) / 2 注释:窗体居中
- End Sub
- Private Sub Form_Unload(Cancel As Integer)
- End 注释:结束工程
- End Sub
- (第二步)添加一个模块,输入以下代码:
- Option Explicit 注释:变量检查
- Type FileSection
- Bytes() As Byte 注释:定义关键数组
- End Type
- Type SectionedFile
- Files() As FileSection 注释:定义辅助数组
- End Type
- Public Function jieQU(Yname As String, Kshi As Long, CHang As Long, Bname As String) As Boolean 注释:定义截取操作函数
- Form1.MousePointer = 11 注释:设置鼠标指针为漏斗型
- jieQU = True 注释:函数成功标志
- Dim mlp As Integer, i As Integer, zhi As Long, fnum As Integer, fnum1 As Integer
- Dim shuZU As Long, myfile As SectionedFile
- shuZU = 2000000 注释:定义内存固定数组,长度为2兆
- Kshi = Kshi * 2 ^ 20
- 注释:转换文件指针单位为字节
- CHang = CHang * 2 ^ 20
- 注释:转换文件长度单位为字节
- If CHang < shuZU Then
- 注释:如果截取长度太小
- MsgBox “截取的文件长度不能小于2兆字节!", vbOKOnly + vbExclamation
- jieQU = False
- 注释:返回操作失败标志,退出操作
- Exit Function
- End If
- If CInt(CHang / shuZU) >= CHang / shuZU Then
- mlp = CInt(CHang / shuZU)
- Else
- mlp = CInt(CHang / shuZU) + 1
- End If
- 注释:计算需要进行操作的次数
- fnum1 = FreeFile注释:返回第一个空闲文件通道
- Open Bname For Binary As #fnum1 注释:以二进制方式打开影音文件
- ReDim myfile.Files(1) 注释:重新分配内存辅助数组
- With Form1.Ba1
- .Visible = True
- .Value = 0
- .Max = mlp
- .Min = 0 注释:展示进度条,提示操作进度
- For i = 1 To mlp 注释:读取和写入数据
- zhi = Kshi + (-1 + i) * shuZU 注释:计算第一个二进制通道指针
- If i < mlp Then 注释:如果不是最后一次操作
- ReDim myfile.Files(1).Bytes(1 To shuZU)
- 注释:定义主要内存数组2兆字节
- fnum = FreeFile 注释:打开第二个空闲文件通道
- Open Yname For Binary As #fnum
- 注释:以二进制方式打开被截取的影音文件
- Seek #fnum, zhi 注释:指针定位
- Get #fnum, , myfile.Files(1).Bytes 注释:获取数据
- Close #fnum
- Else 注释:如果是最后一次操作
- ReDim myfile.Files(1).Bytes(1 To (CHang - (mlp - 1) * shuZU))
- 注释:分配主要内存数组大小为最后遗留数据大小
- fnum = FreeFile
- Open Yname For Binary As #fnum
- Seek #fnum, zhi 注释:定位指针
- Get #fnum, , myfile.Files(1).Bytes
- Close #fnum
- End If
- Put #fnum1, , myfile.Files(1).Bytes 注释:以二进制方式写入保存文件
- .Value = i 注释:进度条开始运行
- Next 注释:循环直到操作次数全部执行
- Close #fnum1 注释:关闭文件通道
- .Visible = False 注释:隐藏进度条
- End With
- Form1.MousePointer = 0 注释:还原鼠标指针指针
- End Function
- //该片段来自于http://www.codesnippet.cn/detail/14122012984.html
来源: http://www.codesnippet.cn/detail/14122012984.html