[英]Can FileInfo.Length be cast as an integer?
我正在使用FileInfo.Length來獲取文件的大小,然后將其發布到GoogleDoc。 問題是我從FileInfo.Length中獲得了負值。
我已經在網上四處尋找一些解決方案,找不到其他原因...除了FileInfo.Length應該是Long的事實,而我正在將其轉換為Int .....這可能與它有關它?
這是我的代碼:
int size = (int)file.Length;
string name = file.Name;
googleBot.insertArchiveRow(name, size);
progressBar.Value++;
this.UpdateLayout();
鑄造會在這里給我帶來麻煩嗎?
謝謝!
是。 投放可能會給您帶來麻煩。
文件有多大?
“ FileInfo.Length應該是Long,而我正在將其強制轉換為Int .....”
如果大於2^31 - 1
則強制轉換為int
可能為負。
例如
long l = (long)Math.Pow(2, 31);
int i = (int) l;
Console.WriteLine("{0}", l);
Console.WriteLine("{0}", i);
印刷品:
2147483648
-2147483648
底線 : FileInfo.Length
是一個long
,請這樣處理。
避免這樣的意外,並讓編譯器生成代碼以執行錯誤檢查:
int size = checked((int)file.Length);
現在,您將獲得一個OverflowException而不是一個負值。
是的,實際上很容易...
int.MaxValue == 2147483647 == 0x7FFFFFFF
int.MinValue == -2147483648 == 0x80000000
int.MaxValue
為2^31 - 1
int.MaxValue
,因此大小int.MaxValue
; 任何大於該值的文件都將被視為負文件,直到再次循環。 :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.