使用c#判断文件时rtf格式还是txt格式 本人学着使用richtextbox写一个记事本,满足可以打开txt文件和rtf文件,目前使用的方法用用捕捉错误的方法来判断文件格式,从而选择不同的打开方式。但这种方法很好资源,属于不得已而使用的方法。请问大家有没有什么好的建议,可以直接判断文件时txt还是rtf,从而直接选择正确方法打开文件,节省资源和时间。小弟先谢过了。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 System.IO.Path可以直接获取文件扩展名 System.IO.Path.GetExtension(string strFilePath)可以得到文件的扩展名是.txt还是.rtf判断一下竟可以了 OpenFileDialog openfile = new OpenFileDialog();openfile.Filter = "(*.txt)|*.txt|(*.rtf)|*.rtf";if (openfile.ShowDialog() == DialogResult.OK){ if(openfile.FileName.EndWith(".txt"){//txt文件} if(openfile.FileName.EndWith(".rtf"){//rtf文件}} 用EndWith(),GetExtension()之类的都无法解决文件后缀被篡改的情况。楼主还是读文件头吧,不通的文件类型都有文件头签名,读开头部分字节流来判断。如RTF文件 开头的16进制签名为7B 5C 72 74 66 31。 Hide1984能不能说详细些,我初学,还不太熟,谢谢 读两个字节,判断文件扩展名说明。你需要的其他文件扩展名代码要去网上搜搜,我没找到真正做的时候,fileType 定义一个枚举就可以了private bool IsAllowedExtension(HttpPostedFile hifile) { bool ret = false; System.IO.FileStream fs = new System.IO.FileStream(hifile.FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read); System.IO.BinaryReader r = new System.IO.BinaryReader(fs); string fileclass = ""; byte buffer; try { buffer = r.ReadByte(); fileclass = buffer.ToString(); buffer = r.ReadByte(); fileclass += buffer.ToString(); } catch { return false; } r.Close(); fs.Close(); /*文件扩展名说明 7173 gif 255216 jpg 7790 exe dll 00 ani--ico--cur 7783 255254 --ini 9146 -- ini 5866 6395 hlp 8269 reg 70105 log 205168 7384 chm 5549 txt 117115 txt 5450 txt 5666 psd *7173 gif *255216 jpg *13780 png *6677 bmp *239187 txt,aspx,asp,sql *208207 xls.doc.ppt *6063 xml *6033 htm,html *4742 js *8075 xlsx,zip,pptx,mmap,zip *8297 rar *01 accdb,mdb *7790 exe,dll *5666 psd *255254 rdp *10056 bt种子 *64101 bat */ String[] fileType = { "255216", "7173", "6677", "13780", "8297", "5549", "870", "87111", "8075" }; for (int i = 0; i < fileType.Length; i++) { if (fileclass == fileType[i]) { ret = true; break; } } return ret; }本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/blacksource/archive/2009/06/10/4257586.aspx 如何能在C#界面上显示维语 大家帮忙看看关于C#问题 c# 图片滚动代码 一个事件委托的问题,难道CSDN上没人能解决吗 C#怎么引用自定义类 高手请帮忙!小弟用c#没有多长时间 MySQL Access SQLServer 这三个数据库哪个好啊? 如何在关闭窗口时弹出一个对话框 C#调用java写的中间层 有没有类似资料查阅?女朋友....................... 如何用C#活得一个网站的Google PR值 请教正则如何既能匹配带全角的英文,又能屏蔽一些符号 数值分析和算法区别?
可以直接获取文件扩展名
可以得到文件的扩展名
是.txt还是.rtf
判断一下竟可以了
OpenFileDialog openfile = new OpenFileDialog();
openfile.Filter = "(*.txt)|*.txt|(*.rtf)|*.rtf";
if (openfile.ShowDialog() == DialogResult.OK)
{
if(openfile.FileName.EndWith(".txt"){//txt文件}
if(openfile.FileName.EndWith(".rtf"){//rtf文件}
}
楼主还是读文件头吧,不通的文件类型都有文件头签名,读开头部分字节流来判断。如RTF文件 开头的16进制签名为
7B 5C 72 74 66 31。
能不能说详细些,我初学,还不太熟,谢谢
你需要的其他文件扩展名代码要去网上搜搜,我没找到
真正做的时候,fileType 定义一个枚举就可以了
private bool IsAllowedExtension(HttpPostedFile hifile)
{
bool ret = false; System.IO.FileStream fs = new System.IO.FileStream(hifile.FileName, System.IO.FileMode.Open, System.IO.FileAccess.Read);
System.IO.BinaryReader r = new System.IO.BinaryReader(fs);
string fileclass = "";
byte buffer;
try
{
buffer = r.ReadByte();
fileclass = buffer.ToString();
buffer = r.ReadByte();
fileclass += buffer.ToString();
}
catch
{
return false;
}
r.Close();
fs.Close();
/*文件扩展名说明
7173 gif
255216 jpg
7790 exe dll
00 ani--ico--cur
7783
255254 --ini
9146 -- ini
5866
6395 hlp
8269 reg
70105 log
205168
7384 chm
5549 txt
117115 txt
5450 txt
5666 psd
*7173 gif
*255216 jpg
*13780 png
*6677 bmp
*239187 txt,aspx,asp,sql
*208207 xls.doc.ppt
*6063 xml
*6033 htm,html
*4742 js
*8075 xlsx,zip,pptx,mmap,zip
*8297 rar
*01 accdb,mdb
*7790 exe,dll
*5666 psd
*255254 rdp
*10056 bt种子
*64101 bat
*/
String[] fileType = { "255216", "7173", "6677", "13780", "8297", "5549", "870", "87111", "8075" }; for (int i = 0; i < fileType.Length; i++)
{
if (fileclass == fileType[i])
{
ret = true;
break;
}
}
return ret;
}
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/blacksource/archive/2009/06/10/4257586.aspx