Существует ли в MFC стандартный диалог просмотра каталогов, в котором пользователь не создает каталоги, чтобы указать те, которые еще не существуют? - PullRequest
0 голосов
/ 23 апреля 2009

Я работаю над загрузочным приложением установщика, и у меня есть диалог, который пользователь может открыть, чтобы выбрать другой целевой каталог из заданного по умолчанию. В настоящее время я использую CFolderDialog для этого, но чтобы пользователь мог выбрать папку, которая еще не существует, он должен сначала создать папку. После того, как пользователь указал каталог, я хочу иметь возможность удалить его, чтобы при запуске установщика он мог создать саму папку, помеченную для удаления. Кроме того, если пользователь отменяет загрузку моего приложения в любое время, я не хочу, чтобы какие-либо нежелательные папки валялись вокруг, когда пользователь перебирал браузер папок. У меня проблема в том, что, если я пытаюсь удалить папку, созданную пользователем при поиске новой целевой папки, я получаю ошибку нарушения общего доступа. (Я сравниваю время создания каталога с системным временем на момент запуска диалога, чтобы убедиться, что я могу удалить каталог.)

Мне нужен либо способ обойти это нарушение совместного доступа, либо другой стандартный диалог, в котором пользователю не нужно создавать новый каталог для его указания только потому, что он еще не существует.

Редактировать: Когда я первоначально разместил это, я забыл, что используемый мной диалог папки - это на самом деле Диалог XFolder на сайте Code Project . Хотя он позволяет пользователю просматривать каталог, он не настолько интуитивен, как диалоги браузера папок, которые я видел в установщиках в прошлом. Что я действительно хочу, так это то, что пользователь может перейти к папке, в которую должна пойти его новая папка, а затем просто добавить новую папку к пути в окне редактирования диалога, не создавая новую папку.

Обновление Поскольку диалог XFolder представляет собой настройку стандартного диалога «Открыть файл», в котором используется шаблон, он не работает в Vista или более новых ОС. Из-за этого я должен отказаться от использования этого для чего-то другого. Я все еще ищу решение здесь. Если кто-то может показать мне, как установить начальный каталог (в отличие от корневого каталога) при использовании SHBrowseForFolder (), я хотел бы использовать это в качестве своего решения.

Ответы [ 4 ]

1 голос
/ 23 апреля 2009

Для вашей цели, вероятно, имеет смысл позволить пользователю выбрать каталог base , например. «C: \ Program Files» (создайте файл в процессе, если это необходимо) и установите его в подкаталог (имя, которое вы добавляете в выбранный путь и позволяете вашему установщику создать). Показать комбинированный путь после того, как пользователь выбрал базу. Таким образом, пользователь не чувствует, что взял на себя ответственность за каталог, который вы создаете, но все же имеет разумный уровень контроля над местом назначения.

0 голосов
/ 13 мая 2009

Вы можете использовать SHBrowseForFolder без указания BIF _ BROWSEINCLUDEFILES или BIF _ NONEWFOLDERBUTTON.

0 голосов
/ 23 апреля 2009

Я никогда не видел такого диалогового окна ни в MFC, ни в каких-либо других технологиях. Я согласен с Shog9, вы должны предоставить пользователю способ разделения выбора базового каталога и создания каталогов.

0 голосов
/ 23 апреля 2009

Вместо того, чтобы вручную создавать установщик, вы рассматривали проект Microsoft с открытым исходным кодом Wix ?

...