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)

Dodaj komentarz

/dozwolony markdown/

/nie zostanie opublikowany/