我正在使用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();
铸造会不会给我带来麻烦?
谢谢!
答案 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.Length
是long
,因此请将其视为此类。
答案 1 :(得分:3)
避免这样的意外,让编译器生成代码来执行错误检查:
int size = checked((int)file.Length);
现在您将获得OverflowException而不是负值。
答案 2 :(得分:1)
是的,很容易,事实上......
int.MaxValue == 2147483647 == 0x7FFFFFFF
int.MinValue == -2147483648 == 0x80000000
int.MaxValue
是2^31 - 1
,所以大小约为2GB;任何大于那个文件的文件都会显示为负数,直到你再次循环回来,就是这样。 :)