2015-04-29 4 views
8

Все папки имеют тип: большинство из них имеют имя «папка с файлами», но некоторые из них называются «Mediaserver» или «Local harddrive» (переводы). Как получить эти типы папок с помощью C#? Я нашел это для файлов: How can I get the description of a file extension in .NETC#: Как получить описание папки?

ответ

14

SHGetFileInfo - это функция, в которой вы нуждаетесь. Вам необходимо передать флаг FILE_ATTRIBUTE_DIRECTORY в качестве параметра в параметр dwFileAttributes.

На основании same answer you linked Я изменил код, чтобы он работал для каталогов.

public static string GetFileFolderTypeDescription(string fileNameOrExtension) 
{ 
    SHFILEINFO shfi; 
    if (IntPtr.Zero != SHGetFileInfo(
         fileNameOrExtension, 
         FILE_ATTRIBUTE_NORMAL | FILE_ATTRIBUTE_DIRECTORY, 
         out shfi, 
         (uint)Marshal.SizeOf(typeof(SHFILEINFO)), 
         SHGFI_USEFILEATTRIBUTES | SHGFI_TYPENAME)) 
    { 
     return shfi.szTypeName; 
    } 
    return null; 
} 
+2

Спасибо. Это отлично работает. Я забыл 'FILE_ATTRIBUTE_DIRECTORY'. – YoYoYonnY

5

Там файл с именем desktop.ini в каждой папке, которая содержит перевод описания папок и иконку для папки в файловом формате INI. Может быть, вам нужно это прочитать.

Я нашел, что для системных папок это ссылается на ресурсы в системных DLL, поэтому может быть не так просто, как кажется.

Это, как говорится, вы также можете попробовать функцию SHGetFileInfo, чтобы получить эту информацию.


Просто увидел, что Sriram Sakthivel дал очень хороший ответ, используя SHGetFileInfo, чтобы идти к этому.

+1

Вы только что образовали меня о * desktop.ini *. Спасибо –

+0

@SriramSakthivel меня тоже ... – YoYoYonnY

Смежные вопросы