• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    用VB6實現文件分割和還原

    發布: 2007-7-14 20:28 | 作者: 佚名    | 來源: 網絡轉載     | 查看: 34次 | 進入軟件測試論壇討論

    領測軟件測試網 雖然目前個人大容量存儲設備(如CD、MO等)已經被廣泛應用,但是由于光盤刻錄機等設備價格居高不下,所以人們最常用的存儲媒介還是軟盤。使用軟盤就存在容量有限的問題,對于較大的文件必須將文件進行分割(讓文件分割成方便的大。,才能用軟盤拷貝和攜帶。目前,有許多軟件具有此項功能,但由于在文件還原時,要求執行還原的機器也必須安裝同樣的軟件才能執行還原操作,考慮到軟件的授權問題,實現起來非常不方便。筆者用VB 6中的二進制雙通道技術實現了該功能,只要運行該程序,即可方便地實現文件的分割和還原。
    編程原理和思路
    文件分割實際上就是將目標文件用二進制讀寫的方法,精確地連續保存為合適大小的獨立文件的過程。文件還原是文件分割的逆過程,即將分割后的文件嚴格地按照分割順序用二進制讀寫的方法寫入同一個文件的過程。
    使用雙通道技術是因為當被分割的文件較大或者非常大(遠大于內存)時,利用單個文件通道定義的內存二進制緩沖數組非常容易造成內存的耗盡而導致操作失敗,并且單個文件通道的處理速度和可靠性也不令人滿意。
    首先使用雙通道技術將目標文件分割成指定大小的文件,擴展名為“指定文件名+.源文件擴展名+.分割序號”。分割時,生成一個還原信息文件“被分割文件名.HY”,該文件記錄文件分割的有關信息。文件還原時,同樣利用雙通道技術,按照在還原信息文件中登記的信息,將待還原的文件寫入同一個文件中即可。
    編程實現
    實現分割功能的主要代碼如下:
    1.分割操作
    Public Function SplitFile(SplitFileName As String, BeginningNumber As Long, ReturnErrorDes As String, Split As Long, oName As String) As Boolean
    /*分割文件函數返回一個邏輯值,true代表成功,false代表失敗。參數依次是:被分割文件名、起始編號、返回錯誤信息、分割后文件大小、分割后文件名稱*/
    Dim SaveName As String
    /*文件通道變量*/
    Dim fnum As Integer, fnum1 As Integer
    SplitFile = True /*初始化*/
    On Error GoTo error1
    Dim CurrentFile As SectionedFile, LngNumFile As Long, LngLoop As Long, FilesLen As Long
    /*得到被分割文件大。/
    FilesLen = FileLen(SplitFileName)
    If FilesLen <= Split + 1 Then
    SplitFile = False
    ReturnErrorDes = “被分割文件小于分割后文件大小,需重新設置!”
    Exit Function
    End If
    fnum = FreeFile /*返回第一個空閑通道用來讀取文件*/
    /*用二進制方式打開被分割文件*/
    Open SplitFileName For Binary As fnum
    /*精確計算文件將被分割的個數*/
    If CInt(FilesLen / Split) >= (FilesLen / Split) OR CInt(FilesLen / Split) = (FilesLen / Split) Then
    LngNumFile = CInt(FilesLen / Split)
    Else
    LngNumFile = CInt(FilesLen / Split) + 1
    End If
    /*分配一個內存輔助數組*/
    ReDim CurrentFile.Files(1)
    /*循環將文件分割,并且生成分割后的文件*/
    For LngLoop = 1 To LngNumFile
    If LngLoop < LngNumFile Then
    /*重新分配大小等于分割尺寸的內存數組*/
    ReDim CurrentFile.Files(1).Bytes(1 To Split)
    /*讀取等于分割大小的二進制數據到內存數組*/
    Get #fnum, , CurrentFile.Files(1).Bytes
    Else
    /*重新分配大小等于遺留長度的內存數組*/
    ReDim CurrentFile.Files(1).Bytes(1 To FilesLen - ((LngNumFile - 1) * Split))
    Get #fnum, , CurrentFile.Files(1).Bytes
    Close #fnum
    End If
    /*計算分割后的文件名,擴展名為00?*/
    SaveName = oName & “.” & Format(BeginningNumber - 1 + LngLoop, “000”)
    /*得到第二個空閑通道用來寫入*/
    fnum1 = FreeFile
    Open SaveName For Binary As fnum1
    /*用二進制方式寫入分割后的文件*/
    Put #fnum1, 1, CurrentFile.Files(1)
    DoEvents
    Close #fnum1
    Next
    /*定義還原信息文件內容*/
    Dim FileInfoFile As FileInfo
    /*分割后文件個數*/
    FileInfoFile.FileCount = LngNumFile
    /*輸出文件名*/
    FileInfoFile.ProjectFileName = oName
    /*被分割文件大。/
    FileInfoFile.ProjectSize = FileLen(SplitFileName)
    /*分割后文件起始編號*/
    FileInfoFile.FileStartNum = BeginningNumber
    /*還原以HY為后綴的信息文件名*/
    SaveName = oName & “.HY”
    fnum = FreeFile
    Open SaveName For Binary As #fnum
    /*寫入還原信息文件
    Put #fnum, , FileInfoFile
    */
    Close #fnum
    Exit Function
    error1:
    ReturnErrorDes = Err.Description
    SplitFile = False
    End Function
    2.文件還原
    Public Function ReassembleFile(TemplateFileName As String, UseOldFilename As Boolean, OutPutName As String) As Boolean
    On Error GoTo error2
    Dim FileInfo As FileInfo, outname As String, File As SectionedFile, LngLoop As Long, OpenName
    Dim fnum As Integer, fnum1 As Integer
    ReassembleFile = True
    fnum = FreeFile
    Open TemplateFileName For Binary As #fnum
    /*讀取還原信息文件的有關內容*/
    Get #fnum, , FileInfo
    Close #fnum
    /*是否是自己指定還原后文件名*/
    If UseOldFilename Then
    outname = FileInfo.ProjectFileName
    Else
    outname = OutPutName
    End If
    ReDim File.Files(1)
    fnum1 = FreeFile
    Open outname For Binary As #fnum1
    /*通過還原信息中記載的文件個數確定讀取次數*/
    For LngLoop = 1 To FileInfo.FileCount
    /*得到分割后生成的文件名稱和路徑*/
    OpenName = FileInfo.ProjectFileName & “.” & Format((FileInfo.FileStartNum - 1 + LngLoop), “000”)
    fnum = FreeFile
    Open OpenName For Binary As #fnum
    Get #fnum, 1, File.Files(1) /*讀。/
    Close #fnum
    Put #fnum1, ,File.Files(1).Bytes /*寫入*/
    Next
    Close #fnum1
    Exit Function
    error2:
    MsgBox “文件操作產生錯誤:” & Err.Description, vbExclamation
    ReassembleFile = False
    Form1.MousePointer = 0
    End Function

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/


    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備2023014753號-2
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>