依然是代码求解!!
有这样一段代码:Private Function OperateFile(ByVal vFile As String, _
ByVal vSplit As Boolean _
) As Long
Dim ItemSize As Long
Dim FileSize As Long
Dim ReadSize As Long
Dim i As Long
Dim vArr() As Byte
Dim fnum2 As Integer
Dim FileName As String
Dim SplitFiles As Long
If vSplit Then
'分割
ItemSize = cmbSplitSize.ItemData(cmbSplitSize.ListIndex)
'取得当前选择的分析尺寸.
ReDim vArr(1 To ItemSize) As Byte
'重定义缓冲数组.
FileName = Right(vFile, InStr(StrReverse(vFile), "\") - 1)
'取得文件名.
fnum = FreeFile()
Open vFile For Binary As fnum
FileSize = LOF(fnum)
'取得文件大小
While FileSize > 0
ReadSize = ItemSize
If ReadSize > FileSize Then
'如果文件所剩余大小比当前选择的小,就使用剩余大小.
ReadSize = FileSize
ReDim vArr(1 To ReadSize)
End If
Get fnum, i * ItemSize + 1, vArr
i = i + 1
fnum2 = FreeFile()
Open Trim(txtObject.Text) & "\" & Trim(Str(i)) & "_" & FileName For Binary As fnum2
' If i = 1 Then Put fnum2, , SplitFiles
Put fnum2, , vArr
Close fnum2
FileSize = FileSize - ReadSize
'文件总大小减少.
Wend
Close fnum
MsgBox "分割成功.", vbOKCancel, "提示信息"
Else
'合并
Dim FindFile As Boolean
Dim FilePath As String
'是否还有后继文件标志
FindFile = True
FileName = Right(vFile, InStr(StrReverse(vFile), "\") - 3)
FilePath = Left(vFile, Len(vFile) - InStr(StrReverse(vFile), "\") + 1)
'求原始文件名称
fnum = FreeFile()
Open Trim(txtObject.Text) & "\" & FileName For Binary As fnum
While FindFile
fnum2 = FreeFile()
Open vFile For Binary As fnum2
FileSize = LOF(fnum2)
If FileSize > 0 Then
ReDim vArr(1 To FileSize)
Get fnum2, 1, vArr
Put fnum, , vArr
Close fnum2
End If
i = i + 1
If Dir(Trim(Str(i + 1)) & "_" & FileName) = "" Then FindFile = False
vFile = FilePath & Trim(Str(i+1)) & "_" & FileName
Wend
Close fnum
MsgBox "合并成功.", vbOKOnly, "提示信息"
End If
End Function
其中有一些不是很理解的语句,如果愿意的话,哪为好心人帮帮忙啊,谢谢!!
以上的代码中有以下的这句:
FileName = Right(vFile, InStr(StrReverse(vFile), "\") - 1)
fnum = FreeFile()
Open vFile For Binary As fnum
还有这段
If ReadSize > FileSize Then
'如果文件所剩余大小比当前选择的小,就使用剩余大小.
ReadSize = FileSize
ReDim vArr(1 To ReadSize)
End If
Get fnum, i * ItemSize + 1, vArr
i = i + 1
fnum2 = FreeFile()
Open Trim(txtObject.Text) & "\" & Trim(Str(i)) & "_" & FileName For Binary As fnum2
' If i = 1 Then Put fnum2, , SplitFiles
Put fnum2, , vArr
Close fnum2
FileSize = FileSize - ReadSize
'文件总大小减少.
Wend
Close fnum
这段:
FindFile = True
FileName = Right(vFile, InStr(StrReverse(vFile), "\") - 3)
FilePath = Left(vFile, Len(vFile) - InStr(StrReverse(vFile), "\") + 1)
'求原始文件名称
fnum = FreeFile()
Open Trim(txtObject.Text) & "\" & FileName For Binary As fnum
While FindFile
fnum2 = FreeFile()
Open vFile For Binary As fnum2
FileSize = LOF(fnum2)
If FileSize > 0 Then
ReDim vArr(1 To FileSize)
Get fnum2, 1, vArr
Put fnum, , vArr
Close fnum2
End If
i = i + 1
If Dir(Trim(Str(i + 1)) & "_" & FileName) = "" Then FindFile = False
vFile = FilePath & Trim(Str(i+1)) & "_" & FileName
Wend
Close fnum
各位高手,尽量帮我详细解释一下啊,期待~~
--------------------编程问答-------------------- 谢谢!! --------------------编程问答-------------------- ...你不懂哪句 - -!
FileName = Right(vFile, InStr(StrReverse(vFile), "\") - 1) '取文件名
fnum = FreeFile() '取一个文件号
Open vFile For Binary As fnum '用二进制打开一个文件,使用刚才取的文件号.
...
说你不清楚的关键句字...
--------------------编程问答-------------------- 帮顶 --------------------编程问答--------------------
FileName = Right(vFile, InStr(StrReverse(vFile), "\") - 1)
'取得文件名
'这里不懂是吗?
'你调用时要给函数传进两个参数,vFile是其中的一个,也就要分割的文件的文件名,它首先
'经过StrReverse转换,使其中字符顺序反向,比如abc就变成了cba,再用InStr函数找出其中第一个
' 反斜杠在其中的位置,再用Right从vFile中右取前InStr(StrReverse(vFile), "\") - 1计算出的字符数
'目的就求短文件名
'例如vFile = "D:\Flash\Flash\12345.swf"
'FileName = Right(vFile, InStr(StrReverse(vFile), "\") - 1)
'得到FileName为12345.swf
fnum = FreeFile() 'FreeFile是函数,为打开的文件分配一个文件号fnum
Open vFile For Binary As fnum '用二进制打开文件
余下的大家接着来 --------------------编程问答-------------------- 一是去掉路径只保留文件名称。
二是文件分割,按指定大小的块循环读取源文件后存入到新的文件中,新的文件名称为指定的前缀加数字序号加源文件名称。
三是对分割的文件按二的逆序进行还原。
--------------------编程问答--------------------
'还有这段--------------------编程问答-------------------- ........................... --------------------编程问答-------------------- ............
If ReadSize > FileSize Then
'如果文件所剩余大小比当前选择的小,就使用剩余大小.
ReadSize = FileSize
ReDim vArr(1 To ReadSize) '重新定义数组的大小
End If
Get fnum, i * ItemSize + 1, vArr '从i * ItemSize + 1字节处读取fnum号文件,放到vArr数组中
i = i + 1
fnum2 = FreeFile() '为打开的文件分配一个文件号fnum2
Open Trim(txtObject.Text) & "\" & Trim(Str(i)) & "_" & FileName For Binary As fnum2 '
' If i = 1 Then Put fnum2, , SplitFiles
Put fnum2, , vArr '将数组vArr中的数据写进文件fnum2,文件路径为Trim(txtObject.Text) & "\" & Trim(Str(i)) & "_" & FileName
Close fnum2 '关闭文件fnum2
FileSize = FileSize - ReadSize
'文件总大小减少.
Wend
Close fnum '关闭文件fnum
顶起,学习了 --------------------编程问答-------------------- 一段代码逐句解释似乎没有必要,要说也只能说个大概。
楼主还是说一下哪里不明白。有针对性,也许能说得更清楚、更深入。
--------------------编程问答-------------------- If ReadSize > FileSize Then
'如果文件所剩余大小比当前选择的小,就使用剩余大小.
ReadSize = FileSize
ReDim vArr(1 To ReadSize) '重新定义数组的大小
End If
Get fnum, i * ItemSize + 1, vArr '从i * ItemSize + 1字节处读取fnum号文件,放到vArr数组中
i = i + 1
fnum2 = FreeFile() '为打开的文件分配一个文件号fnum2
Open Trim(txtObject.Text) & "\" & Trim(Str(i)) & "_" & FileName For Binary As fnum2 '
' If i = 1 Then Put fnum2, , SplitFiles
Put fnum2, , vArr '将数组vArr中的数据写进文件fnum2,文件路径为Trim(txtObject.Text) & "\" & Trim(Str(i)) & "_" & FileName
Close fnum2 '关闭文件fnum2
FileSize = FileSize - ReadSize
'文件总大小减少.
Wend
Close fnum '关闭文件fnum
--------------------编程问答-------------------- 谢谢你们!我基本上明白了,这么多好心人帮我解决难题,这分应该给谁呢?难题啊!
补充:VB , 网络编程