如何判断一个文件是否为MS的excel类型的文件 问题描述:其实很多人也像我一样为了获取一个文件的原始类型而困惑.我们到底通过什么来判断一个文件的原始类型呢?当然只要能判断一个文件是否为MS的excel类型的文件就足够了. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 LZ知道HTML和excel文件可以互相转换么?你把一个HTML文件后缀名改成xls,excel照样能够识别。 int i = uploadFileName.LastIndexOf(".");string fileExt = uploadFileName.Substring(i);if (fileExt != ".xls"){ msgLabel.Text = "您上传的不是Excel文件"; return false;} 以前做一直都判断扩展名而已```和netharry() 兄做法一样 我猜想也是肯定在文件的某个位置写下了文件的类型.可是没有相关的资料查啊/或者说是这种东西太难找了.能不能给的相信一点呢.或者有关这方面的资料.要原始的文件类型,当然WEB控件中的fileupload能够判断一部分文件的原始类型,可是这还是不行,因为我如果我做的是WINFORM程序呢? 文本文件EXCEL也是可以打开的啊.一样可以看作是EXCEL文件.如果是那种纯的EXCEL文件,就用文件头判断,取几个字节的二进制代码比较一下就行了. 我也试过您说的方法,可是我比较了前呵呵,如果仅仅是EXCEL文件判断的话,的确取前几个BYTE就够了.可是还要考虑到一些类似的文件比如金山的WPS.此外就是微软的word excel ppt前60byte都是一样的.从第61开始不同.开始的时候仅仅比较了前50个.所以没看出区别来.金山的excel从第58就能把它排除掉了.谢谢各位了.虽然这个方法笨点.但是目前来看是最有效的了.呵呵可能还有很多朋友不知道如何去比较文件的二进制码呢.我把我的代码贴出来.老鸟就算了.呵呵谢谢各位朋友了 /// <summary> /// 功能:通过文件头,判断文件的原始类型 /// </summary> /// <param name="longth"> /// 去文件头的前多少位.别拿负数做试验了.呵呵 /// </param> static void fileFormat(int longth) { DirectoryInfo dir = new DirectoryInfo(@"../../file"); FileInfo[] fi = dir.GetFiles(); foreach (FileInfo f in fi) { //输出要比较的文件名 //如果和二进制码放到一起就太乱了.所以单独放在外面 //这个是很有用的.因为下面读文件的时候可不是跟你在文件夹中排放的顺序一样啊 //小鸟们要注意 Console.WriteLine("{0}**\t", f.Name); } foreach (FileInfo f in fi) { FileStream fs = new FileStream(f.FullName,FileMode.Open); byte[] by = new byte[longth]; fs.Read(by, 0, longth); fs.Close(); for (int i = 0; i < longth; i++) { Console.Write("{0}",by[i]); } Console.WriteLine(); } } public bool isExeDllFile(string sFileName) { bool xx=false; //default the "sFileName" is not a .exe or .dll file; FileStream fs = new FileStream(sFileName, FileMode.Open, FileAccess.Read); BinaryReader r = new BinaryReader(fs); string bx=""; byte buffer; try { buffer=r.ReadByte(); bx=buffer.ToString(); buffer=r.ReadByte(); bx=bx+buffer.ToString(); } catch { } r.Close(); fs.Close(); if (bx=="7790" || bx=="8297" || bx=="8075" )//7790:exe 8297:rar 8075:pk { xx=true; } return xx; } dll:MZ exe:MZ rar:Rar zip:PK 捕捉鼠标长按消息 window2003 使用 notifyIcon.ShowBalloonTip,没有显示在最上面? Excel增加批注 用VS2005打包,如何让主程序在安装完成后自动启动 急,Datagrid 的 ButtonColumn 按下无反应 发送传真问题? 关于Rows.Find() 清单中的引用与下载的程序集 AffairSystem.Common.exe 的标识不匹配。 如何自己编程控制一个播放器打开特定文件 监测unix平台的进程 高分奖励 C#有什么好的入门书籍?望大虾们推荐一下。 如何监视文件夹下某个文件的变化,并对他进行操作?
你把一个HTML文件后缀名改成xls,excel照样能够识别。
string fileExt = uploadFileName.Substring(i);
if (fileExt != ".xls")
{
msgLabel.Text = "您上传的不是Excel文件";
return false;
}
要原始的文件类型,当然WEB控件中的fileupload能够判断一部分文件的原始类型,可是这还是不行,因为我如果我做的是WINFORM程序呢?
此外就是微软的word excel ppt前60byte都是一样的.从第61开始不同.
开始的时候仅仅比较了前50个.所以没看出区别来.金山的excel从第58就能把它排除掉了.谢谢各位了.虽然这个方法笨点.但是目前来看是最有效的了.呵呵
可能还有很多朋友不知道如何去比较文件的二进制码呢.我把我的代码贴出来.老鸟就算了.呵呵谢谢各位朋友了
/// <summary>
/// 功能:通过文件头,判断文件的原始类型
/// </summary>
/// <param name="longth">
/// 去文件头的前多少位.别拿负数做试验了.呵呵
/// </param>
static void fileFormat(int longth)
{
DirectoryInfo dir = new DirectoryInfo(@"../../file");
FileInfo[] fi = dir.GetFiles();
foreach (FileInfo f in fi)
{
//输出要比较的文件名
//如果和二进制码放到一起就太乱了.所以单独放在外面
//这个是很有用的.因为下面读文件的时候可不是跟你在文件夹中排放的顺序一样啊
//小鸟们要注意
Console.WriteLine("{0}**\t", f.Name);
}
foreach (FileInfo f in fi)
{
FileStream fs = new FileStream(f.FullName,FileMode.Open);
byte[] by = new byte[longth];
fs.Read(by, 0, longth);
fs.Close();
for (int i = 0; i < longth; i++)
{
Console.Write("{0}",by[i]);
}
Console.WriteLine();
}
}
{
bool xx=false; //default the "sFileName" is not a .exe or .dll file; FileStream fs = new FileStream(sFileName, FileMode.Open, FileAccess.Read);
BinaryReader r = new BinaryReader(fs); string bx="";
byte buffer;
try
{
buffer=r.ReadByte();
bx=buffer.ToString();
buffer=r.ReadByte();
bx=bx+buffer.ToString();
}
catch
{ } r.Close();
fs.Close();
if (bx=="7790" || bx=="8297" || bx=="8075" )//7790:exe 8297:rar 8075:pk
{
xx=true;
} return xx; } dll:MZ
exe:MZ
rar:Rar
zip:PK