当前位置:编程学习 > VB >>

依然是代码求解!!

有这样一段代码:
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 ,  网络编程
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,