本人学着使用richtextbox写一个记事本,满足可以打开txt文件和rtf文件,目前使用的方法用用捕捉错误的方法来判断文件格式,从而选择不同的打开方式。但这种方法很好资源,属于不得已而使用的方法。请问大家有没有什么好的建议,可以直接判断文件时txt还是rtf,从而直接选择正确方法打开文件,节省资源和时间。小弟先谢过了。

解决方案 »

  1.   

    System.IO.Path
    可以直接获取文件扩展名
      

  2.   

    System.IO.Path.GetExtension(string strFilePath)
    可以得到文件的扩展名
    是.txt还是.rtf
    判断一下竟可以了
      

  3.   


    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文件}
    }
      

  4.   

    用EndWith(),GetExtension()之类的都无法解决文件后缀被篡改的情况。
    楼主还是读文件头吧,不通的文件类型都有文件头签名,读开头部分字节流来判断。如RTF文件 开头的16进制签名为
    7B 5C 72 74 66 31。
      

  5.   

    Hide1984
    能不能说详细些,我初学,还不太熟,谢谢
      

  6.   

    读两个字节,判断文件扩展名说明。
    你需要的其他文件扩展名代码要去网上搜搜,我没找到
    真正做的时候,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