2015-04-01 81 views
0

余计算的文件的具有这种功能的二进制大小:Windows如何计算文件尺寸?


public static int BinarySize(string path) 
     { 
      FileStream fs = new FileStream(path, FileMode.Open); 
      int hexIn; 
      string ret = ""; 
      for (int i = 0; (hexIn = fs.ReadByte()) != -1; i++) 
      { 
       ret += Convert.ToString(hexIn, 2); 

      } 
      fs.Close(); 
      return ret.Length; 
     } 

我的问题的一个例子是,当我计算这种简单的黑色PNG图像的(10×10像素)myImage

随着该功能的尺寸我发现640位=> 80字节,但窗口说这个文件尺寸是136字节。 为什么56字节的差异?是否将窗口附加到每个文件的安全性,权限或一些私人信息?

+0

显然每个文件的标题至少可以标识文件的类型等。 – 2015-04-01 07:45:49

+0

我使用类似的函数来读取该文件的十六进制,并以89504E 47 0D 0A 1A 0A开头。 PNG;该文件的标识是80字节。 – kimiko88 2015-04-01 07:49:57

回答

4

Convert.ToString(hexIn,2)并不总是返回8个字符,它修剪前导零,所以如果hexIn4,它返回100,但不00000100

您可能想要将其更改为Convert.ToString(hexIn,2).PadLeft(8, '0');。 你也想用StringBuilder而不是string代替ret变量。

顺便说一句,阅读文件来确定它的大小是有点浪费。最好使用FileInfo类来获取文件信息。

+0

现在我使用Convert.ToString(hexIn,2).PadLeft(8,'0');我找到合适的尺寸。谢谢解决我的问题 – kimiko88 2015-04-01 07:54:21

+0

好的答案(+1),但我会首先提及'FileInfo',肯定*不*作为“顺便说一句”......这是确定文件大小的更合适的方法,并且不应仅仅作为一个侧面提及。 – stakx 2015-04-01 07:58:39