c#判断图形文件(GIF,JPG,PNG)的图片格式的方法

    技术2022-05-20  40

      1.  通过文件的扩展名来判断。这种方法比较简单,     但若是有人故意改下文件扩展名,这种方法就不起作用了。  

     2. 通过C#自身提供的方法来进行判断(判断某种确定的 图片 类型)。     EX:      bool isJPG = false;      System.Drawing.Image img = System.Drawing.Image.FromFile(filesName);      if   ( img.RawFormat.Equals(System.Drawing.Imaging.ImageFormat.Jpeg) )       {               isJPG = true;      }   3.通过读取文件内容来判断。     所有的图片文件都包括:文件识别头和图象数据两部分,     其中文件识别头用来让 计算机 判断是哪种文件 格式。     JPEG        所有的JPEG文件以字符串“0xFFD8”开头,并以字符串“0xFFD9”结束。依此便可判别是否是JPEG文件。     BMP     BMP文件以字符串“0x4D42”开头     GIF      gif头六个是 GIF89a或 GIF87a  

    大部分都是通过将文件读成二进制流,取前两个字节判断,比如.jpg的是255216.代码如下:

    public static FileExtension CheckTextFile(string fileName)        {            FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);            System.IO.BinaryReader br = new System.IO.BinaryReader(fs);            string fileType = string.Empty; ;            try            {                byte data = br.ReadByte();                fileType += data.ToString();                data = br.ReadByte();                fileType += data.ToString();                FileExtension extension;                try                {                    extension = (FileExtension)Enum.Parse(typeof(FileExtension), fileType);                }                catch                 {                     extension=FileExtension.VALIDFILE                }                return extension;            }            catch (Exception ex)            {                throw ex;            }            finally            {                if (fs != null)                {                    fs.Close();                    br.Close();                }            }        }    }    public enum FileExtension    {        JPG = 255216,        GIF = 7173,        PNG = 13780,        SWF = 6787,        RAR = 8297,        ZIP = 8075,        _7Z = 55122,        VALIDFILE=9999999   

     经过测试,可以很好的判断.jpg、.gif格式的文件.

    然而对于.txt文件却不是102100,每个.txt返回的值也不一样。显然,这个方法不能满足要求。

    /// <summary>        /// Checks the file is textfile or not.        /// </summary>        /// <param name="fileName">Name of the file.</param>        /// <returns></returns>        public static bool CheckIsTextFile(string fileName)        {            FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);            bool isTextFile=true;            try            {                int i = 0;                int length = (int)fs.Length;                byte data;                while (i < length && isTextFile)                {                    data = (byte)fs.ReadByte();                    isTextFile = (data != 0);                    i++;                }                return isTextFile;            }            catch (Exception ex)            {                throw ex;            }            finally            {                if (fs != null)                {                    fs.Close();                }            }        }

    测试

    bool isTextFile = CheckIsTextFile(this.openFile.FileName);                if (isTextFile)                {                    Label1.Text=openFile.FileName + "是文本文件";                }                else                {                    Label1.Text=openFile.FileName + "不是文本文件!";                }


    最新回复(0)