MIME Type z nazwy pliku

11 grudnia 2007

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]

Podobne notatki:

Może zainteresują Cię również następujące, pododbne notatki:

Nikt jeszcze nie skomentował tego wpisu.
Możesz być pierwszy.

Dodaj swój komentarz

Możesz użyć tych tagów XHTML-a: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Jeśli chcesz wstawić kilku linijkowy fragment kodu, użyj tagów <pre lang="x"></pre> (gdzie x język kodu np. cpp, perl, html). W ten sposób kod zostanie odpowiednio sformatowany i pokolorowany przez system.

Uwaga!

Na tym blogu działa system cache oraz filtr antyspamowy. Twój komentarz może być widoczny na stronie z pewnym opóźnieniem. Proszę o cierpliwość. Jeśli utraciłeś już wszystkie jej zasoby poinformuj mnie o tym, być może system uznał Cię za spamera ;)