日期:2014-05-19  浏览次数:21152 次

c#判断文件类型
请问各位高手,c#怎样提取二进制文件头,提取完以后又是如何判断文件类型的呢?具体思路是怎样的呢?例如:.xls:870;.doc:87111这些数字是哪来的啊?也就是怎么算出来的呢?谢谢了!

------解决方案--------------------
http://topic.csdn.net/t/20030708/15/2004043.html
------解决方案--------------------
任何类型的文件都要遵守一个通用的规则,否则就不会被计算机识别.不信你试着把文件的前几位随便改成任何东西(或者清为0也行),这样文件就打不开了.我们也可以根据这个思想设置一个自己的文件加密工具.跑题了
呵呵在WINDOWS里,文件的前4个比特(byte而不是bit)来存储文件类型(这个对应表我也在找,不过好像很难找的样子,我找了好久了也找不到.可以自己去对).既然知道了前4个比特是用来存储文件类型,那么接下来就好办了,无非是读出来比较一下.代码片段如下
int count = 4;
FileStream fs;
byte[] buffer = new byte[count];
fs = new FileStream(@ "文件路径 ",FileMode.Open);
fs.Read(buffer, 0, count);
这样就读出文件头了,至于你想怎样去判断就自己发挥了,可以组合成字符串,也可以挨个取下标的方式去判断.不过这一切有个前蹄(嘿嘿).就是你要建立你的对照表.我自己测试发现MP3的是
25525067192(这是直接输出的结果),我们可以自己找一些肯定是我们需要类型的文件,把它的前4比特读出来,作为一个判断的标准.
------解决方案--------------------
判断文件类型(文件的真正类型,不是根据扩展名判断),通过文件头来判断
bool xx=false; //default sFileName is not Exe or Dll File
System.IO.FileStream fs=new System.IO.FileStream(sFileName,System.IO.FileMode.Open,System.IO.FileAccess.Read);
System.IO.BinaryReader r=new System.IO.BinaryReader(fs);
string bx= " ";
byte buffer;
try
{
buffer=r.ReadByte();
bx=buffer.ToString();
buffer=r.ReadByte();
bx+=buffer.ToString();

}
catch (Exception exc)
{
Console.WriteLine(exc.Message);
}
r.Close();
fs.Close();
if (bx== "7790 "||bx== "8297 "||bx== "8075 ")//7790:exe,8297:rar,8075:pk
{
xx=true;
}
Console.WriteLine(bx);
return xx; dll:MZ
exe:MZ
rar:Rar
zip:PK