0

ファイルのサイズを取得して GoogleDoc に投稿するために FileInfo.Length を使用しています。問題は、FileInfo.Length から負の値を取得していることです....

私はいくつかの解決策をオンラインで調べましたが、他の理由を見つけることができません... FileInfo.Length は Long である必要があり、それを Int にキャストしていたという事実以外に...これは何か関係がありますか?それ?

これが私のコードです:

                int size = (int)file.Length;
                string name = file.Name;
                googleBot.insertArchiveRow(name, size);
                progressBar.Value++;
                this.UpdateLayout();

ここでキャスティングで問題が発生しますか?

ありがとう!

4

3 に答える 3

4

このような驚きを避け、コンパイラにエラーチェックを実行するコードを生成させます。

 int size = checked((int)file.Length);

負の値ではなく、OverflowExceptionが発生するようになりました。

于 2013-01-26T00:24:19.057 に答える
4

はい。キャストすると問題が発生する可能性があります。

ファイルの大きさは?

「FileInfo.Length は Long である必要があり、Int にキャストしていました.....」

より大きい場合2^31 - 1 、 an へのキャストは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ため、そのように扱います。

于 2013-01-26T00:06:18.597 に答える
1

ええ、実際にはかなり簡単です...

int.MaxValue ==  2147483647 == 0x7FFFFFFF
int.MinValue == -2147483648 == 0x80000000

int.MaxValueです2^31 - 1ので、サイズは約 2GB 程度です。それよりも大きなファイルは、再び循環するまで負として読み取られます。つまり、. :)

于 2013-01-26T00:17:59.387 に答える