我正在尝试使用File.Copy([FileName])
命令监视大型文件复制过程的进度(无需自行手动复制数据字节)。
所以我要做的是获取正在复制的文件的长度,并将其与目标文件的长度进行比较。这会让我对复制进度有一个很好的认识。
唯一的问题是目标文件上的FileInfo.Length
属性返回正在复制的文件的总大小,而不是磁盘上文件的实际大小。有没有其他方法来获取这些数据?
谢谢,
克里斯
我查看了链接,这根本不是我想要的。我只想显示文件副本的进度,如果文件很大(复制时间超过3秒)。
大多数文件大概需要1/4秒,但有一些文件需要大约600 + MB,这需要一些时间来通过网络进行复制。
我需要的是如何在目标目录中获取部分复制文件的实际文件大小。
(由于我这里没有帐户,所以我没有让我回复你对我的问题的回复,所以它被显示为答案,即使它不是。)
谢谢,克里斯
答案 0 :(得分:0)
您可以使用流自行执行复制操作并显示进度:
Const SOURCE_FILEPATH = "C:\TEMP\GameOfThrones.png"
Const DEST_FILEPATH = "C:\GameOfThrones.png"
Const BUFFER_SIZE As Integer = 32767
If System.IO.File.Exists(DEST_FILEPATH) Then System.IO.File.Delete(DEST_FILEPATH)
Using inStream As New System.IO.FileStream(SOURCE_FILEPATH, IO.FileMode.Open, IO.FileAccess.Read)
Dim offset As Integer = 0
Dim count As Integer = BUFFER_SIZE
Using outStream As New System.IO.FileStream(DEST_FILEPATH, IO.FileMode.Create, IO.FileAccess.Write)
Do While offset + count <= inStream.Length AndAlso offset <> inStream.Length
Dim buffer(count) As Byte
inStream.Seek(offset, IO.SeekOrigin.Begin)
inStream.Read(buffer, 0, buffer.Length - 1)
outStream.Seek(outStream.Length, IO.SeekOrigin.Begin)
outStream.Write(buffer, 0, buffer.Length - 1)
offset += count
If count + offset > inStream.Length Then
count = inStream.Length - offset
Else
count = BUFFER_SIZE
End If
System.Console.WriteLine((offset / inStream.Length) * 100 & "% complete")
Loop
End Using
End Using