FileInfo.Length可以转换为整数吗?

时间:2013-01-26 00:04:41

标签: c# casting fileinfo

我正在使用FileInfo.Length来获取文件的大小,然后将其发布到GoogleDoc。问题是我从FileInfo.Length获得负值....

我已经在网上寻找了一些解决方案而且找不到任何其他原因...除了FileInfo.Length应该是一个很长的事实并且我将它投射到Int .....这可能有一些东西用它做什么?

这是我的代码:

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

铸造会不会给我带来麻烦?

谢谢!

3 个答案:

答案 0 :(得分:4)

是。施法可能会给你带来麻烦。

文件有多大?

  

“FileInfo.Length应该很长,我把它投射到Int ......”

如果大于2^31 - 1,则投放到int可能是否定的......

e.g。

        long l = (long)Math.Pow(2, 31);
        int i = (int) l;
        Console.WriteLine("{0}", l);
        Console.WriteLine("{0}", i);

打印:

2147483648
-2147483648

底线FileInfo.Lengthlong,因此请将其视为此类。

答案 1 :(得分:3)

避免这样的意外,让编译器生成代码来执行错误检查:

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

现在您将获得OverflowException而不是负值。

答案 2 :(得分:1)

是的,很容易,事实上......

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

int.MaxValue2^31 - 1,所以大小约为2GB;任何大于那个文件的文件都会显示为负数,直到你再次循环回来,就是这样。 :)