delphi 如何读取文件头 判断文件类型?

stephenchern 2015-10-31 04:53:52
delphi 如何读取文件头 判断文件类型?
...全文
1053 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
lyhoo163 2015-11-06
  • 打赏
  • 举报
回复
delphi 判断文件类型函数:
functiom GetFileType(FileName:String):string;
var
  MyImage:TMemoryStream;   
  Buffer:Word;
  i:integer;
begin
  Result := 'Err'; 
  MyImage:=TMemoryStream.Create;                
  try
    MyImage.LoadFromFile(FileName); 
    MyImage.Position := 0;                      // 指针文件开头的位置
    if MyImage.Size = 0 then Exit;              // 文件大小等于0退出
    MyImage.ReadBuffer(Buffer,2);               // 读取文件的前2个字节[低位到高位],放到Buffer里面 
    if Buffer=$4D42 then  Result :='BMP';      
    if Buffer=$D8FF then  Result :='JPEG'; 
    if Buffer=$4947 then  Result :='GIFP'; 
    if Buffer=$050A then  Result :='PCX'; 
    if Buffer=$5089 then  Result :='PNG'; 
    if Buffer=$4238 then  Result :='PSD'; 
    if Buffer=$A659 then  Result :='RAS'; 
    if Buffer=$DA01 then  Result :='SGI'; 
    if Buffer=$4949 then  Result :='TIFF'; 
  finally 
    MyImage.Free;                              // 释放内存流对象 
  end;
end;
stephenchern 2015-11-01
  • 打赏
  • 举报
回复
Delphi从内存流中判断图片格式_街头巷尾 2009-03-19 11:22:55| 分类: 个人日记 | 标签: |字号大中小 订阅 Delphi从内存流中判断图片格式 利用内存流来判断文件的格式,其实判断文件的前几个字节就可以简单的判断这个文件是什么类型的文件,例如 jpg文件 是 FFD8 (从低位到高位就要反过来 D8FF 下面都是一样) BMP文件 是 424D ---4D42 其他的我就不一一列举了,想知道跟多文件类型分别是用什么字符作为文件的开头的话,下载个C32asm或者UE等这类16进制编辑器就可以看到了。 procedure TForm1.Button1Click(Sender: TObject); //Button1的单击事件 var //声明变量 MyImage:TMemoryStream; //内存流对象 Buffer:Word; i:integer; begin if OpenDialog1.Execute then //OpenDialog1是一个文件打开对话框,在Delphi组件面版的Dialog页中可以找到。 begin MyImage:=TMemoryStream.Create; //建立内存流对象 try MyImage.LoadFromFile(OpenDialog1.FileName); //把刚刚用户选择的文件载入到内存流中 MyImage.Position := 0; //移动指针到最开头的位置 if MyImage.Size = 0 then //如果文件大小等于0,那么 begin //错误 ShowMessage('错误'); Exit; end; MyImage.ReadBuffer(Buffer,2); //读取文件的前2个字节,放到Buffer里面 if Buffer=$4D42 then //如果前两个字节是以4D42[低位到高位] begin ShowMessage('BMP'); //那么这个是BMP格式的文件 end else if Buffer=$D8FF then //如果前两个字节是以D8FF[低位到高位] begin //JPEG ShowMessage('JPEG'); //........一样 下面不注释了 end else if Buffer=$4947 then begin //GIF ShowMessage('GIF'); end else if Buffer=$050A then begin //PCX ShowMessage('PCX'); end else if Buffer=$5089 then begin //PNG ShowMessage('PNG'); end else if Buffer=$4238 then begin //PSD ShowMessage('PSD'); end else if Buffer=$A659 then begin //RAS ShowMessage('RAS'); end else if Buffer=$DA01 then begin //SGI ShowMessage('SGI'); end else if Buffer=$4949 then begin //TIFF ShowMessage('TIFF'); end else //如是其他类型的文件的话,直接显示错误 begin //ERR ShowMessage('ERR'); end; //if end; //if finally MyImage.Free; //释放内存流对象 end; end; 上面的过程只是简单的判断文件的前2个字节,如果想更加精确一点的话,可以把文件最后2个字节也判断上。 1234567890ABCDEFGHIJKLMNabcdefghijklmn!@#$%^&&*()_+.一三五七九贰肆陆扒拾,。青玉案元夕东风夜放花千树更吹落星如雨宝马雕车香满路凤箫声动玉壶光转一夜鱼龙舞蛾儿雪柳黄金缕笑语盈盈暗香去众里寻他千百度暮然回首那人却在灯火阑珊处 阅读已结束,如果下载本文需要
stephenchern 2015-11-01
  • 打赏
  • 举报
回复
http://wenku.baidu.com/link?url=nuGZkSQC_xDIP-gvwY72WsH1XZ4xPvFZsvEphslGiG0WeZHtL1fXcDjJMDLtzQQuSgaA2pw_gG0SD1QSxfs79FbRqWy67MRq1DgM3jjvf_G 自己已经解决。。。。
stephenchern 2015-10-31
  • 打赏
  • 举报
回复
就顶下帖子。。。 要读到文件的文件头 然后判断问题具体是什么文件类型 还请指教 谢谢。

1,183

社区成员

发帖
与我相关
我的任务
社区描述
Delphi Windows SDK/API
社区管理员
  • Windows SDK/API社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧