2011-08-25 49 views
3

我试图使用File.Copy([FileName])命令来监视大文件复制过程的进度(没有手动复制数据字节)。FileInfo.Length始终显示文件总大小,而不是实际当前大小

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

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



编辑(从下面感动 - 提交由OP答案)

我看着链接,这是不是在所有我想要的东西。我只想显示文件复制的进度,如果文件很大(复制需要3秒以上)。

大部分文件需要大约1/4秒的时间,但有一些是~600 + MB,需要一些时间才能通过网络复制。

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

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

谢谢,克里斯

+0

复制http://stackoverflow.com/questions/187768/can-i-show-file-copy-进度 - 使用 - FileInfo的-CopyTo从-在网 –

回答

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 
相关问题