FileInfo.Length 可以转换为整数吗?
本文关键字:整数 转换 Length FileInfo | 更新日期: 2023-09-27 17:56:01
我正在使用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();
选角会给我带来问题吗?
谢谢!
是的。铸造可能会给您带来问题。
文件有多大?
"FileInfo.Length应该是一个长,我把它投射到一个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);
您现在将获得一个溢出异常,而不是负值。
是的,很容易,事实上...
int.MaxValue == 2147483647 == 0x7FFFFFFF
int.MinValue == -2147483648 == 0x80000000
int.MaxValue
是2^31 - 1
,所以大小约为~2GB; 任何大于此值的文件都将读取为负数,直到您再次循环回来,也就是说。 :)