С# Open/SaveFileDialog с другой файловой системой

Я бы хотел, чтобы стандартные окна открывались и сохранялись диалоговые окна файлов, однако конкретное приложение, для которого я его использую, представляет собой удаленную файловую систему (в принципе, я хотел бы каким-то образом просто предоставить интерфейс IFileSystem для SaveFileDialog и заставить его волшебным образом изменить файлы, которые он видит, когда я их предоставляю). Кто-нибудь знает о полной реализации этих диалогов, которая поддерживает эту функциональность? Есть ли способ сделать это со стандартными диалоговыми окнами C#/windows?

Если нет, я буду реализовывать диалог самостоятельно. Я бы по-прежнему любил любые ресурсы для реализации этих диалогов, даже если они не поддерживают эту функциональность, просто чтобы я мог разорвать их на части и добавить эту функциональность самостоятельно.

Спасибо!


person Trevor Sundberg    schedule 13.05.2012    source источник
comment
Разве вы не можете заставить эту другую файловую систему распознаваться оболочкой, чтобы файловые диалоги работали бесплатно?   -  person David Heffernan    schedule 13.05.2012


Ответы (2)


Единственный выбор — реализовать собственное расширение пространства имен оболочки. Он может быть зарегистрирован как дочерний элемент «Мой компьютер», поэтому он выглядит как другой диск. Осторожно: это утомительная работа, и из-за ограничений .NET framework (‹4.0) она должна быть написана на C/C++.

Вот пример.

person dzendras    schedule 13.05.2012
comment
Я думал, что ограничение до 4.0 заключалось только в том, что вы не могли загружать разные версии CLR бок о бок, поэтому вы все еще могли написать управляемое расширение, но оно застряло как работающее с любой CLR, которая уже может быть запущена в проводнике? - person James Manning; 14.05.2012
comment
Это именно то ограничение, о котором я говорю. - person dzendras; 14.05.2012
comment
Это похоже почти на то, что я хотел бы. Хотя в идеале я не мог бы просматривать ничего, кроме этого, я посмотрю, есть ли способ скрыть все остальное или просто отклонить файлы не из этого места. Спасибо за ссылку! - person Trevor Sundberg; 14.05.2012
comment
@dzendras - если это ограничение, то вам необходимо использовать C/C++, вы просто ограничены тем, что CLR уже загружена. В большинстве случаев это означает, что вы не можете использовать C#/CLR 4, потому что что-то еще уже загрузило CLR версии 2. Разве это не так? - person James Manning; 14.05.2012
comment
Да, это. Однако, если приложению требуется .NET 4.0 (или новее), проблем не возникает: stackoverflow.com/questions/3053876/ - person dzendras; 16.05.2012

Эти классы представляют собой очень тонкую оболочку для вызовов собственных API-функций оболочки Windows. GetOpenFileName() для XP и более ранних версий, COM-интерфейс IFileOpenDialog для Vista и более поздних версий. Если вы не видите файловую систему в проводнике, то эти обертки вообще бесполезны.

person Hans Passant    schedule 13.05.2012