Вам нужно будет использовать Windows API Функция SHGetFileInfo
В структуре вывода szTypeName содержит имя, которое вы ищете.
[StructLayout(LayoutKind.Sequential, CharSet=CharSet.Auto)]
public struct SHFILEINFO
{
public IntPtr hIcon;
public int iIcon;
public uint dwAttributes;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
public string szDisplayName;
[MarshalAs(UnmanagedType.ByValTStr, SizeConst = 80)]
public string szTypeName;
};
Обратите внимание, что это просто текущее «Дружественное имя», которое хранится в реестре Windows, это просто метка (но, вероятно, достаточно подходит для вашей ситуации).
Разница между szTypeName и szDisplayName описана в MSDN:
szTypeName: строка с нулевым символом в конце, которая
описывает тип файла.
szDisplayName: строка с нулевым символом в конце
который содержит имя файла как
он появляется в оболочке Windows, или
путь и имя файла, который
содержит значок, представляющий
файл.
Для более точного определения типа файла вам необходимо прочитать первый блок байтов каждого файла и сравнить их с опубликованными спецификациями файлов. Для получения информации о форматах файлов см. Сайт, например Wotsit .
Связанная страница также содержит полный пример кода C #.