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 + "不是文本文件!"; }