FileInfo.Length始终显示文件总大小,而不是实际当前大小

时间:2011-08-25 13:45:59

标签: vb.net-2010 system.io.fileinfo

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

所以我要做的是获取正在复制的文件的长度,并将其与目标文件的长度进行比较。这会让我对复制进度有一个很好的认识。

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


<小时/> 编辑(从下方移动 - 作为OP的回答提交)

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

大多数文件大概需要1/4秒,但有一些文件需要大约600 + MB,这需要一些时间来通过网络进行复制。

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

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

谢谢,克里斯

1 个答案:

答案 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