none
急!!!如何取得文件的真正类型? RRS feed

  • 问题

  •  

    在.net开发中,根据用户指定的文件路径来判断此文件类型.直接通过尾缀不能判断文件的真正类型.

    如文件的真正类型是.doc格式,而我把该文件该成.xls,这时进行上传时候,是否能进行程序控制来给用户信息提示啊?

    谢谢!

    2008年4月14日 5:55

答案

全部回复

  • 要真正判别文件的类型,要读文件的头部几个字节进行比对,具体请参考:http://www.diybl.com/course/4_webprogram/asp.net/netjs/200798/70673.html

    2008年4月14日 6:26
  • 这个是无法实现的,比如一个txt文件,我改成INI,那么你说这个到底是什么类型的文件呢?目前判断只能通过后缀,不过希望以后的文件存储会有一个标准,就是在文件的数据中存放真实的文件类型说明,让我们能更方便的获取,共同期待吧。

     

    谢谢

    Wilson

    2008年4月14日 6:31
    版主
  • Code Snippet

    using System;
    using System.Data;
    using System.IO;

    namespace server
    {
        class server
        {
            public static void Main(string[] args)
            {
               // File.Create("hello.txt");
                FileStream st = new FileStream("Soft20060210102344676.rar", FileMode.Open, FileAccess.Read);
                BinaryReader bi = new BinaryReader(st);
                string fileclass;

                byte temp;
                try
                {
                    temp = bi.ReadByte();
                    fileclass = temp.ToString();
                    temp = bi.ReadByte();
                    fileclass += temp.ToString();
                }
                catch (Exception e)
                {
                    Console.WriteLine(e.Message);
                    st.Close();
                    bi.Close();
                    Console.ReadLine();
                    return;
                }
                Console.WriteLine(fileclass);
                st.Close();
                bi.Close();
                Console.ReadLine();
                return;
            }
        }
    }

     

     

     

    上面的代码你可以试一下,至少对exe文件和rar文件是行得通的,读这两类文件的头两个字节,输出是一定的。所以即使别人该了一个exe文件的后缀,你也能通过读头部的两个字节来判断。
              

     

           

     

     

    2008年4月14日 7:27
  • 主要看你的应用场合,如果是图片,可以通过Image.RawFormat 属性判断,如果是exe等,可以用楼上的判断等等。靠扩展名是不可靠的

    2008年4月14日 7:37
    版主
  • 首先感谢各位的帮助,基本能应对一些问题,现在.doc,.xls系列的,对应的字节号为208207,估计office系列的,都对应这个号,这样导致我不能正确判断是.doc 还是.xls文件,各位是否还有好办法?谢谢

    2008年4月14日 9:24
  • 可以参考:http://www.garykessler.net/library/file_sigs.html 里面列举了很多文件的signature,包括doc和xls,它们的开头几个一样,但它们的subheader不一样,可以根据它们的subheader去鉴别。

    2008年4月15日 2:42
  • 首先感谢你的关注,你能否更详细的说出如何取得subheader的信息吗,我将byte数截取到512,但这些好象没有规律,所以希望你能给个更详细的回答,谢谢!

    期待中......

    2008年4月16日 7:06