Принятый ответ кажется приемлемым, за исключением того, что CodeAnalysis / FxCop будет жаловаться на тот факт, что он перехватывает общий тип исключения.
Кроме того, кажется, что оператор is может слегка ухудшить производительность.
CA1800: не приводите без необходимости говорит «подумайте о проверке результата вместо оператора as», но если вы сделаете это, вы будете писать больше кода чем если вы поймаете каждое исключение в отдельности.
Во всяком случае, вот что я хотел бы сделать:
bool exThrown = false;
try
{
// Something
}
catch (FormatException) {
exThrown = true;
}
catch (OverflowException) {
exThrown = true;
}
if (exThrown)
{
// Something else
}
Начните здесь: http://msdn.microsoft.com/en-us/library/bb773177 (VS.85) .aspx
К сожалению, это довольно неприятный API, потому что каждый объект в оболочке идентифицируется так называемым PIDL, который был создан самим сатаной, чтобы сбить с толку любого, кто пытается избежать нарушений доступа и утечек памяти.
Положение обычных файлов и папок хранится в скрытом файле .DS_Store , который существует для любого каталога Положение значков громкости в Mac OS X, кажется, хранится в Finders .plist (~ / Library / Preferences / com.apple.finder).
Для настольных компьютеров, соответствующих спецификациям freedesktop.org (какими бы дефектными они ни были), соответствующий документ, похоже, здесь ; однако в нем ничего не говорится о должностях.
Многие ответы здесь говорят о том, что делать такие вещи в Windows довольно сложно. Подозреваю, что это не случайно. Если вы никогда не читали блог Раймонда Чена The Old New Thing , я советую вам это сделать. Г-н Чен часто обсуждает подводные камни и злоупотребления, возникающие при программном доступе к таким вещам, как размещение значков.
Edit : Вот некоторые комментарии о разрешении программного доступа в Windows.
Хотя вы, вероятно, не должны уметь это делать (по крайней мере, в Windows), это не значит, что это не может быть сделано. Я просто прошу вас делать это в духе добра, а не зла.
Я пытался разобраться в этом пару раз за последние пару лет, вроде такая банальная штука (это было для верстака AmigaDos), но программировать для оболочки Windows некрасиво; на самом деле программировать что-либо в Windows API некрасиво. Это ужасный беспорядок. Будьте готовы к выдергиванию волос и боли в сердце.
Не для того, чтобы вас обескуражить, но MicroSoft считает, что лучше знает, когда это произойдет. для размещения значков в представлениях папок, и я мало что нашел в способах реализовать «постоянное» размещение значков (т.е. вид значков далеко не постоянный). Документы MSDN мало помогают в этом отношении (по крайней мере, нет примеров). Последнее, на что я обращал внимание, это написание расширения оболочки для записи и восстановления положение значка (я бы не стал записывать их в реестр, я просто собирался сохранить позиции в файле desktop.ini папки, но, вероятно, было бы лучше создать файл в папке личных настроек пользователя).
Код В Project есть ряд статей о программировании и расширениях оболочки.
http://www.codeproject.com/KB/shell/ http://www.codeproject.com/KB/shell/shlext.aspx
В итоге я написал свою маленькую оболочку на красивом чистом чистом C ++. это делает именно то, что я хочу в контексте моего приложения.
В GNOME Nautilus хранит положение значков и прочего в ~ / .nautilus / metafiles.
У файлов там уродливые имена, так как они на самом деле являются экранированными URI. Например, мои метаданные для значков на рабочем столе находятся в ~ / .nautilus / metafiles / file:% 2F% 2F% 2Fhome% 2Ffederico% 2FDesktop.xml
Однако нет общедоступного интерфейса для доступа или изменения этих данных. Вы, конечно, можете самостоятельно проанализировать файл и изменить его, но изменения не вступят в силу до следующего перезапуска Nautilus.