Как получить / установить тип папки в C#
Windows определяет пять типов папок (общие элементы, документы, изображения, музыка и видео). В проводнике Windows вы можете получить / установить тип, щелкнув правой кнопкой мыши по папке и выбрав Свойства-> Настройка-> Оптимизировать эту папку для. Я ищу способ получить / установить тип папки в C#. Я искал это, но я не должен использовать правильную терминологию.
Может ли кто-нибудь указать мне правильное направление?
Обновление: спасибо всем за идеи! Думал, что это будет просто - очевидно, нет.
Очень странно. Я могу выбрать папку без desktop.ini. Я могу изменить свойства этой папки, выбрать тип папки, нажать "Применить", увидеть, как создан desktop.ini, и соответственно изменить вид папки. Однако я могу удалить desktop.ini, и тип папки сохраняется. Через проводник перезагрузить. Через винду перезагрузить.
Что касается возможных теневых копий, я не могу найти доказательств, подтверждающих это. За исключением C:, защита системы отключена на всех моих дисках. Используя ShadowExplorer, я не нахожу ссылок ни на какие файлы desktop.ini.
Непонятные...
3 ответа
Я думаю, что вы можете использовать настольный INI-файл или реестр.
Однако, если вы создаете desktop.ini в папке, обязательно добавьте атрибут "System" в эту папку, в противном случае desktop.ini будет игнорироваться.
attrib +s FolderName
(или с кодом C#)
Ссылка на MSDN http://msdn.microsoft.com/en-us/library/aa969337.aspx
Тип папки хранится в файле desktop.ini, расположенном в этой папке (который имеет атрибут SYSTEM и по умолчанию он не виден - необходимо снять флажок "Скрыть защищенные системные файлы в настройках проводника Windows).
Пример содержимого desktop.ini из Windows 7 из папки, настроенной на "оптимизацию для изображений" или как там ее называют в английской Windows.
[ViewState]
Mode=
Vid=
FolderType=Pictures
Чтобы изменить / прочитать FolderType, вы можете просто изменить / прочитать этот файл.
Этот файл (desktop.ini) может содержать больше настроек (например, пользовательский значок файла / расположение ресурса). Смотрите desktop.ini в стандартной папке Documents или Desktop.
Изменить / обновить в соответствии с комментарием:
Может быть, это происходит, потому что файлы с system
Атрибут может иметь теневую копию, и они будут восстановлены после их удаления? Я уверен, что нет другого места, где это хранится.
Попробуйте перезаписать этот файл вместо удаления.
В реестре Windows применяются только настройки по умолчанию при создании новых папок.
Также я немного покопался и нашел некоторую информацию о функции WINAPI, которая обрабатывает файлы desktop.ini "более правильно".
Смотрите это: Создание значков для папок в проводнике Windows, с использованием C# Эван Стоун в codeproject.net
Еще одна вещь о настроенных папках без desktop.ini - я думаю, что это невозможно. Проверьте это еще раз и убедитесь, что вы можете видеть файлы с system
приписывать.
Изменить 2:
Пожалуйста, взгляните на ответ SchlaWiener, он указал на что-то важное.
Я отклонил его ответ, но я ошибся, теперь не могу отменить свой голос.
Ну, вы хотите направление, так что..... Это ссылка на документ Microsoft о настройке для папок...
Как изменить настройки просмотра папки или настроить папку
В этой статье вы найдете ссылку на пару подразделов реестра и ключей. Конечно, они не одинаковы в разных версиях Windows (слишком просто)
WinXP, 2003
HKEY_CURRENT_USER\Software\Microsoft\Windows\Shell
HKEY_CURRENT_USER\Software\Microsoft\Windows\ShellNoRoam
Vista, Win7
HKEY_CURRENT_USER\Software\Classes\Local Settings\Software\Microsoft\Windows\Shell
Глядя на упомянутые ключи реестра и на сложность этих ключей, я действительно предлагаю оставить эту работу самой ОС.
РЕДАКТИРОВАТЬ Меня поразило мое самоуважение некоторыми грубыми комментариями ниже, поэтому я решил поискать немного больше документации по этому файлу DESKTOP.INI, который, кажется, является лучшим вариантом для решения вашей проблемы. Я нашел эту документацию, которая кажется очень исчерпывающей (но опять же, она также демонстрирует, как правильно обрабатывать этот маленький файл, очень сложный) И, кстати, мне еще предстоит понять, действительно ли изменение этого файла действительно имеет значение или нет. Насколько я попробовал, тестовая папка остается неизменной, но это может быть вызвано каким-то видом кэширования.