我需要精确的文件大小。
无论如何都要找到以位为单位的文件大小(不是字节)。
我不想找到System.IO.FileInfo.Length并将其转换为位。因为这会丢失一个字节信息。
答案 0 :(得分:9)
不可能(在我所知的任何操作系统中)拥有大小不是一个字节的倍数的文件。换句话说,文件不可能具有类似“3字节和2位”的大小。这就是为什么检索文件长度的所有功能都以字节为单位返回。您可以将其乘以8以获得位数:
long lengthInBits = new FileInfo(fileName).Length * 8;
答案 1 :(得分:2)
好吧,使用FileInfo.Length
并乘以8是查找文件大小的最自然方式。它不像它的长度不是是8位的倍数:
long length = new FileInfo(fileName).Length * 8;
如果你想要花哨,你可以改为左移:
long length = new FileInfo(fileName).Length << 3;
但这并没有产生任何实质性的不同。
还有一些其他方法可以找到文件的长度 - 例如将其打开为流并询问流的长度 - 但使用FileInfo.Length
可能是最简单的。你为什么不想用最明显的方法?这就像问一下如何将两个数字加在一起,说你不想使用+
运算符,但没有给出理由......
答案 2 :(得分:1)
一个字节中的8位:
int numOfBits = myFileInfo.Length * 8;
为什么你觉得这个问题?
如果您不喜欢这个神奇的数字:
public const int BitsInByte = 8;
int numOfBits = myFileInfo.Length * BitsInByte;