2010-09-21 97 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;