ファイルのMimeを判断する

VB6,VBA,VBS,EXCEL,DOS,BAT,WSH,WORDの小技メモ

HTML/ CSS/ CGI-Perl/ JavaScript/ JavaApplet/ AccessUp/ Internet/ EnglishLearn/ ちゃいちゃん天使/ 天使メッセージ/ 飯田ワールド/ 結城ワールド/ プロフィール/ WEB相談室/ WEBアンテナ/ 燈明日記/ Perlノート/ 漢字起源/ yahoo

はじめに

本ページは、ウインドウズ系全般のティプスメモです。

そう、はじめはVB系のティプスメモだったのですが…いつの間にか、ウインドウズ系全般のティプスメモになってしまいました。

ちなみに、ティプス(Tips)とは、マニュアルに書かれていない技法や裏わざのことですが、本ページでは、私が経験してこれはと思ったノウハウのメモになっています。

尚、以下は本サイトの最新情報(ブログ)です。

それでは、本ページが何かのお役に立てれば幸いです。ごゆっくりご覧ください。

2009-11-25 ファイルのMimeを判断する

ファイルがテキストファイルなのか、バイナリファイルなのか…判断したい場合、FindMimeFromDataが使えます。

FindMimeFromDataは、データを解析し、以下のMimeを判断できるようです。


◆FindMimeFromDataが返すMimeリスト
MIME TypeDescription
text/plainPlain text. Default if data is primarily text and no other type detected.
text/htmlHTML. Default if common tags detected and server does not supply image/* type.
text/xmlXML data. Default if data specifies
text/richtextRich Text Format (RTF).
text/scriptletMicrosoft Windows script component.
audio/x-aiffAudio Interchange File, Macintosh.
audio/basicAudio file, UNIX.
audio/midInternet Explorer 7 and later. MIDI sequence.
audio/wavPulse Code Modulation (PCM) Wave audio, Windows.
image/gifGraphics Interchange Format (GIF).
image/jpegJPEG image.
image/pjpegDefault type for JPEG images.
image/pngInternet Explorer 7 and later. Portable Network Graphics (PNG).
image/x-pngInternet Explorer 7 and later. Default type for PNG images.
image/tiffTagged Image File Format (TIFF) image.
image/bmpBitmap (BMP) image.
image/x-xbitmapRemoved from Internet Explorer 8.
image/x-jgAOL Johnson-Grace compressed file.
image/x-emfEnhanced Metafile (EMF).
image/x-wmfWindows Metafile Format (WMF).
video/aviAudio-Video Interleaved (AVI) file.
video/mpegMPEG stream file.
application/octet-streamBinary file. Default if data is primarily binary.
application/postscriptPostScript (.ai, .eps, or .ps) file.
application/base64Base64-encoded bytes.
application/macbinhex40BinHex for Macintosh.
application/pdfPortable Document Format (PDF).
application/xmlXML data. Must be server-supplied. See also "text/xml" type.
application/atom+xmlInternet Explorer 7 and later. Atom Syndication Format feed.
application/rss+xmlInternet Explorer 7 and later. Really Simple Syndication (RSS) feed.
application/x-compressedUNIX tar file, Gzipped.
application/x-zip-compressed Compressed archive file.
application/x-gzip-compressed Gzip compressed archive file.
application/javaJava applet.
application/x-msdownloadExecutable (.exe or .dll) file.
http://msdn.microsoft.com/en-us/library/ms775147(VS.85).aspx

◆サンプルソース
<DllImport("urlmon.dll", CharSet:=CharSet.Auto)> _
Private Function FindMimeFromData( _
    ByVal pBC As IntPtr, _
    <MarshalAs(UnmanagedType.LPWStr)> ByVal pwzUrl As String, _
    <MarshalAs(UnmanagedType.LPArray, ArraySubType:=UnmanagedType.I1, SizeParamIndex:=3)> ByVal pBuffer As Byte(), _
    ByVal cbSize As Integer, _
    <MarshalAs(UnmanagedType.LPWStr)> ByVal pwzMimeProposed As String, _
    ByVal dwMimeFlags As Integer, _
    ByRef ppwzMimeOut As IntPtr, _
    ByVal dwReserved As Integer) As Integer
End Function

Public Function getMimeFromFile(ByVal file As String) As String

    Dim mimeout As IntPtr

    If Not System.IO.File.Exists(file) Then
        Throw New FileNotFoundException()
    End If

    Dim MaxContent As Integer = CInt(New FileInfo(file).Length)

    If MaxContent > 256 Then MaxContent = 256

    Using fs As New FileStream(file, FileMode.Open)
        Dim buf(MaxContent) As Byte
        fs.Read(buf, 0, MaxContent)
        fs.Close()
        Dim result As Integer = FindMimeFromData(IntPtr.Zero, file, buf, MaxContent, Nothing, 0, mimeout, 0)
    End Using

    Dim mime As String = Marshal.PtrToStringUni(mimeout)

    Marshal.FreeCoTaskMem(mimeout)

    Return mime
End Function
http://dobon.net/cgi-bin/vbbbs/srch.cgi?PAGE=20&andor=and&logs=.%2Fvb%2Fvb.dat&no=0&word=intptr

◆補足

getMimeFromFile関数の引数へファイルパス名を指定します。リターン値は、MIME Typeです。
尚、マーシャル(Marshal)は、あるプログラムで利用されるデータ形式を、異なるプログラムで利用可能な形式に変換することです。
MarshalAsやMarshalでC言語のデータ形式をVBで利用可能に変換しているようです。

◆留意点

ご自分が使うシステムで念入りに検証してから適用した方が良いでしょう!

◆参考

おわりに

以下のページには、すべてのTIPSがあります。もしよろしければ、どうぞ!

尚、ご感想、ご意見、誤字、脱字、間違い等がありましたら遠慮なくVB-TIPS掲示板へご指摘ください。

人のよいところをどんどん見つけよう