none
複製檔案如何顯示時間進度 RRS feed

  • 問題

  •  

    請問該怎麼作,才能像視窗在複製檔案時也能跑出時間進度、剩餘多少時間?謝謝。

     

     

     

    以下是網路上找的

    ------------------------------------------------------------------------------------------

    網路速度為 1.5Mb 約 154B/Sec
    1.5*1024 將 Mb 換成 bits,再除 10 換成 Bytes
    (1.5*1024)/10

    然後看你的檔案大小,如 10MB 則大概是 1 分鐘的時間
    10*1024 將 MB 換成 Bytes,再除連線速度,再除 60 秒,就有分鐘了
    ((10*1024)/154)/60

    大概是這樣算

     

    2007年7月26日 下午 10:56

解答

  • 那是要做動態計算的。

     

    首先,你要知道還有多少檔案大小未複製完,也就是有多少 byte 未被複製。

    再來,你要知道每秒鐘可被複製的檔案大小有多少,也就是 bytes/sec。

     

    有了這二個資料,你就可以得到還要花多少時間。

     

    時間(秒)= 未複製之檔案大小 (bytes) / 每秒可複製的 byte 數 (byte/sec)

    若要更精確,可以把時間再縮短,例如 0.1sec 可複製多少 byte。

     

    例如(以下以 1MB = 1000KB 來計算):

     

    1. 你還有 8.5MB 未複製,已知複製速度是 100K/sec,那還要花 85 秒鐘才會複製完。

    2. 你還有150MB 未複製,已知複製速度是 30MB/sec,那還要花 5 秒鐘才會複製完。

     

    網路下載的時間也可以用這個方法估算。

     

    但是,因為 byte/sec 會受到硬體或網路大小的影響而有所變化,所以你必須要動態計算,

    例如每 5-10 秒就重新計算一次。

     

    2007年7月27日 上午 02:41
    版主

所有回覆

  • 您可以參考msdn:ProgressBar 類別

    2007年7月27日 上午 01:09
    版主
  • HI,

     

    1. 先為程式放入一個BackgroundWorker控制項, 並加入DoWork事件處理程序

    2. 欲執行複製時呼叫:

        BackgroundWorker物件.RunWorkerAsync()

    3. 製作DoWork事件處理程序

        Private Sub BackgroundWorker1_DoWork(ByVal sender As Object, ByVal e As

            System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
                    My.Computer.FileSystem.CopyFile("目的檔案", "來源檔案", FileIO.UIOption.AllDialogs)
        End Sub

     

    程式就會自動顯示複製的進度表

     

    tihs

    • 已提議為解答 C.Kevin 2012年5月11日 上午 07:51
    2007年7月27日 上午 01:44
  •  

    謝謝大大門的回答,我的問題可能問不清楚----

    我想表達的是如何在程式介面用程式碼實現檔案複製共需花費多少時間、還剩餘多少時間,一個時間進度。

     

    像當下有些線上遊戲,更新時介面會出現時間進度

    像視窗複製檔案時,跑出來的時間進度是怎麼寫的,謝謝!

    2007年7月27日 上午 02:26
  • 那是要做動態計算的。

     

    首先,你要知道還有多少檔案大小未複製完,也就是有多少 byte 未被複製。

    再來,你要知道每秒鐘可被複製的檔案大小有多少,也就是 bytes/sec。

     

    有了這二個資料,你就可以得到還要花多少時間。

     

    時間(秒)= 未複製之檔案大小 (bytes) / 每秒可複製的 byte 數 (byte/sec)

    若要更精確,可以把時間再縮短,例如 0.1sec 可複製多少 byte。

     

    例如(以下以 1MB = 1000KB 來計算):

     

    1. 你還有 8.5MB 未複製,已知複製速度是 100K/sec,那還要花 85 秒鐘才會複製完。

    2. 你還有150MB 未複製,已知複製速度是 30MB/sec,那還要花 5 秒鐘才會複製完。

     

    網路下載的時間也可以用這個方法估算。

     

    但是,因為 byte/sec 會受到硬體或網路大小的影響而有所變化,所以你必須要動態計算,

    例如每 5-10 秒就重新計算一次。

     

    2007年7月27日 上午 02:41
    版主
  •  tihs 寫信:

    HI,

     

    1. 先為程式放入一個BackgroundWorker控制項, 並加入DoWork事件處理程序

    2. 欲執行複製時呼叫:

        BackgroundWorker物件.RunWorkerAsync()

    3. 製作DoWork事件處理程序

        Private Sub BackgroundWorker1_DoWork(ByVal sender As Object, ByVal e As

            System.ComponentModel.DoWorkEventArgs) Handles BackgroundWorker1.DoWork
                    My.Computer.FileSystem.CopyFile("目的檔案", "來源檔案", FileIO.UIOption.AllDialogs)
        End Sub

     

    程式就會自動顯示複製的進度表

     

    tihs

     

    但如果複製時檔案存在,它會詢問是否取代,若按取消 會有例外錯誤發生

    如何避免呢

    2008年4月2日 上午 08:09
  • 1.
    My.Computer.FileSystem.CopyFile("來源檔案", "目的地(可在這指定複製後的檔案名稱)", 顯示進度對話框, 取消複製時的動作)

    2.
     My.Computer.FileSystem.CopyFile("來源檔案", "目的地(可在這指定複製後的檔案名稱)", 是否覆寫)

    MSDN: http://msdn.microsoft.com/zh-tw/library/36xbexyf(v=vs.80).aspx

    • 已編輯 C.Kevin 2012年5月11日 上午 08:02
    2012年5月11日 上午 07:52