簡體   English   中英

FileInfo.Length可以強制轉換為整數嗎?

[英]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.MaxValue2^31 - 1 int.MaxValue ,因此大小int.MaxValue 任何大於該值的文件都將被視為負文件,直到再次循環。 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM