2010-09-21 108 views
-1

我需要文件的确切大小。查找文件大小位

有无论如何找到位(不是字节)的文件大小。

我不想找到System.IO.FileInfo.Length并将其转换为位。因为这会丢失一个字节的信息。

+6

为什么不用'myFileInfo.Length * 8'?你有什么对FileInfo.Length属性? – Ani 2010-09-21 10:58:12

+0

为什么你需要它的位,为什么你不能将长度转换为位? – Grzenio 2010-09-21 10:58:14

+1

这里似乎有一个隐藏的问题。你说它丢失了一个字节的信息。那是什么意思?您是否试图修复应用程序中的错误? – 2010-09-21 11:19:05

回答

9

这是不可能的(在任何操作系统,我知道的)有文件的大小不是一个字节的倍数。换句话说,文件不可能具有“3字节和2位”的大小。这就是为什么所有检索文件长度的功能以字节为单位返回它的原因。你可以乘以8来得到位数:

long lengthInBits = new FileInfo(fileName).Length * 8; 
+4

我认为你在这个问题的原因上正确地击中了头部。 – 2010-09-21 12:04:56

2

那么,使用FileInfo.Length并乘以8是最大的自然找到一个文件的大小位的方式。它不喜欢的话可以有一个长度 8位的倍数:

long length = new FileInfo(fileName).Length * 8; 

如果你想成为幻想,你可以左移它来代替:

long length = new FileInfo(fileName).Length << 3; 

这但不会有任何实质性的改变。

还有其他一些方法可以找到文件的长度 - 例如打开它作为一个流并询问流的长度 - 但使用FileInfo.Length可能是最简单的。你为什么不想用最明显的方法?这就像问如何添加两个数字加在一起,说你不想使用+操作,但不给一个原因......在一个字节

1

8位:

int numOfBits = myFileInfo.Length * 8; 

为什么你觉得这是一个问题吗?

如果你不喜欢这个神奇的数字:

public const int BitsInByte = 8; 
int numOfBits = myFileInfo.Length * BitsInByte;