1.  通过文件的扩展名来判断。这种方法c#判断图形文件(GIF,JPG,PNG)的图片格式的方法比较简单,
     但若是有人故意改下文件扩展名,这种方法就不起作用了。  

 2. 通过C#自身提供的方法来进行判断(判断某种确定的 图片 c#判断图形文件(GIF,JPG,PNG)的图片格式的方法类型)。
    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.通过读取文件内容来判断。
    所有的图片文件都包括:文件识别头和图象数据两部分,
    其中文件识别头用来让 计算机 c#判断图形文件(GIF,JPG,PNG)的图片格式的方法判断是哪种文件 格式。
    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 + "不是文本文件!";
               
}


本文转载:CSDN博客