Typ MIME z nazwy pliku
• tech • 162 słowa • 1 minuta czytania
Szukałem jakiejś prostej funkcji lub metody pobrania typu MIME dla pliku mając jego nazwę lub rozszerzenie. Niestety nic ciekawego nie znalazłem na MSDN-ie, żadnej WinAPI-owskiej funkcji do tego celu, jedynie GetContentTypeFromFileName z ATL-owego serwera.
No cóż trzeba było coś samemu sklecić, a raczej to chyba bardziej przeportować w/w funkcję na czyste WinAPI. Bo znając już tę prostą metodę, jak to zrobić, nowej implementacji już raczej nie będę wymyślał ;)
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;
}
Komentarze (0)