我正在使用一对io.filestreams复制一个文件,因此我可以在复制文件时监视其进度。但是,与系统副本相比,复制率似乎很奇怪。该文件正在从本地计算机复制到远程计算机(具有UNC路径),无论计算机是什么,该文件看起来都是一致的。
作为参考,如果通过拖放文件来复制文件,则大约需要13秒钟,并且Windows文件复制进度条会对此进行相应反映。
如果我使用代码复制文件,则“进度条”显示所有字节均在一秒内被复制,那么在关闭读取数据流的过程中大约会有12秒的延迟。
我尝试在编写过程中刷新流,但这似乎没有任何影响。为什么字节显示的写入速度如此之快,然后在代码使用循环退出文件流时发生延迟?
这是我使用的方法:
Public Sub CopyFileInByteChunks(SourcePathFile As String, DestinationPathFile As String, NumberOf1KByteChunks As Long)
Dim CopyBufferSize As Long = 1024 * 1024
Console.WriteLine("START")
Using sr = New IO.FileStream(SourcePathFile, IO.FileMode.Open, FileAccess.Read)
Using sw = New IO.FileStream(DestinationPathFile, IO.FileMode.Create)
Dim ThisFileBytesSoFar As Long = 0
sw.SetLength(sr.Length) 'Ensures that the write out will be in contiguous bytes on the device (disk)
Dim byteData(CopyBufferSize) As Byte
Dim bytesRead As Long
Do
bytesRead = sr.Read(byteData, 0, CopyBufferSize) 'read 1 buffer worth of data
ThisFileBytesSoFar += bytesRead 'for prog bar
sw.Write(byteData, 0, bytesRead)
Console.WriteLine(ThisFileBytesSoFar)
If bytesRead = 0 Then
Exit Do
End If
Loop
Console.WriteLine("Completed Copy Loop")
End Using
Console.WriteLine("Exited Writer Using")
End Using
Console.WriteLine("Exited Reader Using")
End Sub