2015-08-28 91 views
0

算術溢出此FTP上傳片段引起「算術運算導致溢出」的bWorker.Report進度線進度條

Dim fileStream() As Byte = System.IO.File.ReadAllBytes(TextBox1.Text) 
    Dim requestStream As System.IO.Stream = request.GetRequestStream() 
    For offset As Integer = 0 To fileStream.Length Step 1024 
     bWorker.ReportProgress(CType(offset * ProgressBar1.Maximum/fileStream.Length, Integer)) 
     Dim chSize As Integer = fileStream.Length - offset 
     If chSize > 1024 Then chSize = 1024 
     requestStream.Write(fileStream, offset, chSize) 
    Next 

錯誤一定大小的文件我做了什麼錯?

+1

當你得到錯誤時offset,ProgressBar1.Maximum和fileStream.Length的值是什麼?你有沒有嘗試過'CDbl(offset)/ fileStream.Length * ProgressBar1.Maximum'? –

+0

我對Vb.net相當陌生 - 什麼是在瀏覽器中的console.log的視覺工作室等效物?!如何在運行時以調試模式查看這些值? – andymoyle

+0

修改過的表達式起作用了!謝謝 – andymoyle

回答

0

看起來offset * ProgressBar1.Maximum的值變得大於Integer.MaxValue(2147483647)。

您可以以不同的順序執行計算避免溢出:

bWorker.ReportProgress(CType(offset/fileStream.Length * ProgressBar1.Maximum, Integer)) 

它只是恰巧,CTYPE(X,整數)可以縮短到CINT(x)的,所以你可以寫越短越好:

bWorker.ReportProgress(CInt(offset/fileStream.Length * ProgressBar1.Maximum))