C++\cli Проверить, можно ли здесь создать файл, FolderBrowseDialog
Я использую папку BrowseDialog, чтобы дать пользователю возможность выбрать, куда программа собирается сохранить некоторые файлы. существует проблема в том, что пользователь может выбрать путь, которым приложение не может манипулировать, например, "c:\" (программа запускается пользователем, а не администратором)
Я видел какую-то программу, которая предлагает мне изменить свой путь на "мои документы" всякий раз, когда я пытаюсь выбрать путь, которым ПОЛЬЗОВАТЕЛЬ не может манипулировать, однако я не мог понять, как это сделать. обратите внимание, что я использую папку BrowseDialog, а не savefiledialog.
Поэтому я подумал, что, может быть, я выведу предупреждение, используя FileIOPermission. но по некоторым причинам это не работает. Вот быстрый код, который я написал, но исключение не выдается. FileIOPremission на MSDN
using namespace System::Security::Permissions;
FileIOPermission^ f2 = gcnew FileIOPermission( FileIOPermissionAccess::Write,"C:\\");
try {
f2->Demand();
}
catch (System::Security::SecurityException^ s){
MessageBox::Show(s->Message);
}
1 ответ
Вы на неправильном пути с этим. Да, FileIOPermission не делает то, что вы надеетесь, это класс, связанный с безопасностью, который позволяет вам писать код, который запускается в песочнице. Как код, который выполняется в браузере, не давая ему разбрызгивать файлы по всему диску пользователя. Или чтение конфиденциальных файлов. Это не работает в обычном приложении C++/CLI, оно работает с полным доверием, предоставляя пользователю доступ ко всем каталогам и файлам, к которым у него обычно есть доступ, без добавления дополнительных ограничений. У вас нет причин добавлять дополнительные.
Запись файлов на диск - это вообще опасная операция. Многие вещи могут пойти не так. Вы выполняете свой код в операционной системе, в которой есть много других процессов, обращающихся к файлам. Попытка перезаписать файл, который читается другим процессом, вызовет исключение. Диск может заполниться. Пользователь мог ввести имя каталога, к которому у него нет доступа, это просто еще один режим отказа. Просто поймайте IOException и сообщите об этом пользователю.
И, конечно же, начните путешествие в диалоговом окне из каталога, с которым хорошо знаком ограниченный пользователь. Ее папка "Документы" - это ее "домашний" каталог. Если не очевидно, что вы собираетесь выгрузить целую кучу файлов в выбранный каталог, отобразите мягкое напоминание, если вы увидите какие-либо другие файлы в каталоге. Избегает "Eek, что ты сделал!" Ответ, когда она узнает, что здесь в папке Documents вдруг появилось намного больше файлов. Первые несколько раз. Также не стесняйтесь создавать свою собственную подпапку, когда вы можете дать ей описательное имя, чтобы этого не произошло. Какое-то имя, в котором есть дата / время, обычно работает.