3

我正在尝试使用该File.Copy([FileName])命令监视大文件复制过程的进度(无需自己手动复制数据字节)。

所以我想要做的是获取被复制文件的长度,并将其与目标文件的长度进行比较。这将使我对复制进度有一个很好的了解。

唯一的问题是FileInfo.Length目标文件的属性返回被复制文件的总大小,而不是磁盘上文件的实际大小。有没有其他方法可以获取这些数据?谢谢,克里斯



编辑(从下面移动——由 OP 作为答案提交)

我查看了链接,这根本不是我想要的。如果文件很大(复制时间超过 3 秒),我只想显示文件复制的进度。

大多数文件大约需要 1/4 秒,但也有一些是 ~600+MB,通过网络复制需要一些时间。

我所需要的只是如何获取目标目录中部分复制文件的实际文件大小。

(由于我在这里没有帐户,所以它没有让我回复您对我的问题的回复,所以它被显示为答案,即使它不是。)

谢谢,克里斯

4

1 回答 1

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
于 2011-12-19T02:57:38.093 回答