我正在使用folderBrowseDialog让用户能够选择程序保存某些文件的位置。有一个问题,用户可以选择应用程序无法操作的路径,例如“c:\”(该程序由用户而不是管理员启动)
我曾经看过一些程序,当我尝试选择USER无法操作的路径时,建议我改变“我的文档”的路径,但是我无法弄清楚如何去做。 请注意,我正在使用folderBrowseDialog而不是savefiledialog。
所以我想也许我会使用FileIOPermission弹出一个警告。但对某些人而言,它不起作用。这是我写的快速代码,但永远不会抛出异常。 FileIOPremission on 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);
}
答案 0 :(得分:1)
你对此走错了路。是的,FileIOPermission没有按照您的希望执行,这是一个安全相关的类,允许您编写在沙箱中运行的代码。就像在浏览器中运行的代码一样,阻止它在整个用户磁盘上溅出文件。或者阅读敏感文件。这在一个vanilla C ++ / CLI应用程序中不起作用,它完全信任,允许用户访问她通常有权访问的所有目录和文件,而不会增加进一步的限制。你没有理由增加额外的。
将文件写入磁盘通常是一项危险的操作。很多事情都可能出错。您在具有许多其他访问文件的进程的操作系统上运行代码。试图覆盖某些其他进程正在读取的文件将导致异常。磁盘可能会填满。用户可能已输入她无权访问的目录名称,这只是一种故障模式。只需捕获IOException并告诉用户它。
确定,从限制用户熟悉的目录开始对话中的旅程。她的文件夹是她的“家”目录。如果您要在所选目录中转储一大堆文件并不明显,那么如果您在目录中看到任何其他文件,则会显示一个温和的提醒。避免“Eek,你做了什么!”当她发现这里的文件目录突然有了更多的文件时回复。前几次。当您可以为其指定一个描述性名称时,也不要犹豫,创建自己的子文件夹,这样就不会发生这种情况。一些具有日期/时间的名称通常有效。