嗨,我想把一个分裂的文件合并到一起。我有这个代码工作,但它是痛苦的缓慢。有什么办法让我加快速度吗?每个文件块可以包含多达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()
发布于 2014-12-23 18:37:37
一次复制一个字节的文件并不像它所能做到的那样高效。相反,您可以使用缓冲区和FileStream来复制文件块;最基本的是:
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 ModuleUsing结构确保文件流被关闭并正确地处理。
您可以通过报告进度来使其更加复杂,例如,在复制每个文件部件后增加一个计数器。
https://stackoverflow.com/questions/27624656
复制相似问题