MIME Type z nazwy pliku

Szukałem jakieś prostej funkcji lub metody pobrania MIME Type dla pliku mając jego nazwę lub rozszerzenie. Niestety nic ciekawego nie znalazłem na MSDNie, żadnej winapi'owskiej funkcji do tego celu, jedynie GetContentTypeFromFileName z ATL-owego serwera.

No cóż trzeba było cos samemu sklecić, a raczej chyba bardziej przeportować w/w funkcje na czyste WinAPI. Bo znając już prostą metodę jak to dokonać, nowej implementacji już raczej nie wymyślimy :P

Dla potomności ;)

[code lang="cpp"]
std::string GetContentTypeFromFileName(const std::string& filename) {
// default to application/octet-stream
std::string content = "application/octet-stream";

// get the file extension
char szExt[_MAX_EXT];
_splitpath(filename.c_str(), NULL, NULL, NULL, szExt);

if (*szExt) {
HKEY hExtKey;
DWORD dwErr = RegOpenKeyEx(HKEY_CLASSES_ROOT, szExt, 0, KEY_READ, &hExtKey);

if (dwErr == ERROR_SUCCESS) {
DWORD dwType = REG_SZ;
DWORD dwBufSize = 0;
dwErr = RegQueryValueEx(hExtKey, "Content Type", NULL, &dwType, NULL, &dwBufSize);

if (dwErr == ERROR_SUCCESS) {
char* szBuf = new char[dwBufSize];
dwErr = RegQueryValueEx(hExtKey, "Content Type", NULL, &dwType, (LPBYTE)szBuf, &dwBufSize);
content = std::string(szBuf, dwBufSize);
delete [] szBuf;
}

RegCloseKey(hExtKey);
}
}

return content;
}
[/code]

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *