Бетке Сергей: iT блог

PowerShell: Откриване на MIME за файлови или неочевидни проблеми при извикване на FindMimeFromData

Челно решение

И така, ще използваме API на FindMimeFromData. Ето обвивка за използване на тази функция в PowerShell:

Позволете ми да насоча вниманието ви към един важен момент, с който самият аз загубих половин час. Обърнете внимание на типа параметри pwzUrl, pwzMimeProposed. Не е [System.String], а [System.Text.StringBuilder]. Този тип трябва да се използва в обвивки, ако има нужда да може да се предаде null като стойност на параметър, а не празен низ.! Ако използвате типа [System.String], указателят към празен низ ще бъде предаден на API, което не е същото за много функции на Windows API.

По-долу е директно кода на PowerShell за определяне на MIME на файла (ако файлът не съществува, MIME ще се определя от неговото име, по-точно от разширението, което ни е необходимо):

Горният код отлично разпознава MIME по съдържанието на файла, а ако файлът не съществува - по разширението на името му.

Нека издадем командлета Get-MIME

Както можете да си представите, марширането на параметрите в горния код беше видяно в мрежата. Бях обаче объркан от обработката на изходния параметър и се прокраднаха съмнения. И всъщност c # предлага много по-„красиви“ маршалинги, включително за параметри „out“. И така, първо c # кода на нашата обвивка с новия маршалинг:

Забелязахте ли атрибутите, които определят марширането на изходния параметър? И сега кодът за нашия cmdlet:

Е, сега е много лесно да се определи MIME типът за файлове:

Горният код за съществуващ файл ще определи MIME по съдържание, за недостъпен - по разширението на името на файла.