首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有效合并文件块

有效合并文件块
EN

Stack Overflow用户
提问于 2014-12-23 16:53:06
回答 1查看 828关注 0票数 1

嗨,我想把一个分裂的文件合并到一起。我有这个代码工作,但它是痛苦的缓慢。有什么办法让我加快速度吗?每个文件块可以包含多达5mb的块,并且可以将100个或更多块重新放在一起。我将向它传递块文件路径"mergeFileNameArray“的数组,以及新合并文件的”文件名“。

非常感谢!

Dim STo As System.IO.Stream = System.IO.File.Open \_ (filename, \_ System.IO.FileMode.Create, \_ System.IO.FileAccess.Write) Dim BW As New System.IO.BinaryWriter(STo) For Each F In mergeFileNameArray Dim STi As System.IO.Stream = System.IO.File.Open \_ (F, \_ System.IO.FileMode.Open, \_ System.IO.FileAccess.Read) Dim BR As New System.IO.BinaryReader(STi) Do Until (BR.BaseStream.Position = BR.BaseStream.Length) BW.Write(BR.ReadByte) Loop BR.Close() Next BW.Close()

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-23 18:37:37

一次复制一个字节的文件并不像它所能做到的那样高效。相反,您可以使用缓冲区和FileStream来复制文件块;最基本的是:

代码语言:javascript
复制
Option Infer On
Imports System.IO

Module Module1

    Sub ConcatenateFileParts(fileParts As String(), destFile As String)
        Using outStream As New FileStream(destFile, FileMode.Create, FileAccess.Write, FileShare.None)
            Dim bufferLength = 32768
            Dim buffer(bufferLength - 1) As Byte
            Dim bytesRead As Integer
            For Each inFile In fileParts
                Using inStream As New FileStream(inFile, FileMode.Open, FileAccess.Read, FileShare.Read)
                    bytesRead = inStream.Read(buffer, 0, bufferLength)
                    While bytesRead > 0
                        outStream.Write(buffer, 0, bytesRead)
                        bytesRead = inStream.Read(buffer, 0, bufferLength)
                    End While
                End Using
            Next
        End Using

    End Sub

    Sub Main()
        ' I put a couple of files in "C:\temp\subdir" for testing.
        Dim filesToMerge = Directory.GetFiles("C:\temp\subdir")
        Dim dest = "C:\temp\merged.txt"
        Try
            ConcatenateFileParts(filesToMerge, dest)
        Catch ex As Exception
            MsgBox("File merge failed because " & ex.Message)
        End Try

    End Sub

End Module

Using结构确保文件流被关闭并正确地处理。

您可以通过报告进度来使其更加复杂,例如,在复制每个文件部件后增加一个计数器。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27624656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档