2011-08-25 89 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 
相關問題