博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用Win32API 读取文件头获取Mime-Type
阅读量:5910 次
发布时间:2019-06-19

本文共 1555 字,大约阅读时间需要 5 分钟。

第一个种方式利用Win32API 读取文件头获取Mime-Type

 
[DllImport(
@"
urlmon.dll
"
, CharSet
=
CharSet.Auto)]
private
extern
static
System.UInt32 FindMimeFromData(
System.UInt32 pBC,
[MarshalAs(UnmanagedType.LPStr)] System.String pwzUrl,
[MarshalAs(UnmanagedType.LPArray)]
byte
[] pBuffer,
System.UInt32 cbSize,
[MarshalAs(UnmanagedType.LPStr)] System.String pwzMimeProposed,
System.UInt32 dwMimeFlags,
out
System.UInt32 ppwzMimeOut,
System.UInt32 dwReserverd
);
public
string
getMimeFromFile(
string
filename)
{
if
(
!
File.Exists(filename))
throw
new
FileNotFoundException(filename
+
"
not found
"
);
byte
[] buffer
=
new
byte
[
256
];
using
(FileStream fs
=
new
FileStream(filename, FileMode.Open))
{
if
(fs.Length
>=
256
)
fs.Read(buffer,
0
,
256
);
else
fs.Read(buffer,
0
, (
int
)fs.Length);
}
try
{
System.UInt32 mimetype;
FindMimeFromData(
0
,
null
, buffer,
256
,
null
,
0
,
out
mimetype,
0
);
System.IntPtr mimeTypePtr
=
new
IntPtr(mimetype);
string
mime
=
Marshal.PtrToStringUni(mimeTypePtr);
Marshal.FreeCoTaskMem(mimeTypePtr);
return
mime;
}
catch
(Exception e)
{
return
"
unknown/unknown
"
;
}
}

第二种方式 利用系统注册表查找Mime-Type

 
using
System.IO;
using
Microsoft.Win32;
string
GetMimeType(FileInfo fileInfo)
{
string
mimeType
=
"
application/unknown
"
;
RegistryKey regKey
=
Registry.ClassesRoot.OpenSubKey(
fileInfo.Extension.ToLower()
);
if
(regKey
!=
null
)
{
object
contentType
=
regKey.GetValue(
"
Content Type
"
);
if
(contentType
!=
null
)
mimeType
=
contentType.ToString();
}
return
mimeType;
}

转载于:https://www.cnblogs.com/08shiyan/archive/2011/05/30/2063102.html

你可能感兴趣的文章
windows无法启动MySQL服务 错误1067
查看>>
JS基础学习
查看>>
mysql启动不起来了!
查看>>
apache绑定多个域名
查看>>
bzoj3295: [Cqoi2011]动态逆序对
查看>>
【转载】怎样理解阻塞非阻塞与同步异步的区别?
查看>>
String不得不说的那些事
查看>>
[转载]泛化、实现、依赖和关联的区别
查看>>
# 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
查看>>
面试题3:数组中重复的数字,不能修改原数组
查看>>
webUI自动化测试框架---”pyswat“介绍
查看>>
Jenkins+Jmeter持续集成笔记(三:集成到Jenkins)
查看>>
DOS命令大全
查看>>
[转]升级Flash Builder 4.6中的Flash Player版本
查看>>
ZOJ 3329 One Person Game
查看>>
关于Numba开源库(Python语法代码加速处理,看过一个例子,速度可提高6倍)
查看>>
堆的实现(图片演示+文字讲解)
查看>>
[笔记] 四边形不等式
查看>>
适配器模式
查看>>
【转载】程序员:增加编程经验的3种途径
查看>>