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 可以转换为整数吗?

是的。铸造可能会给您带来问题。

文件有多大?

"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.MaxValue2^31 - 1,所以大小约为~2GB; 任何大于此值的文件都将读取为负数,直到您再次循环回来,也就是说。 :)