0

我正在使用 folderBrowseDialog 让用户能够选择程序将保存某些文件的位置。存在用户可以选择应用程序无法操作的路径的问题,例如“c:\”(程序由用户而不是管理员启动)

每当我尝试选择用户无法操作的路径时,我已经看到一些程序建议我将路径更改为“我的文档”,但是我不知道该怎么做。请注意,我使用的是 folderBrowseDialog 而不是 savefiledialog。

所以我想也许我会弹出一个警告,使用 FileIOPermission。但由于某种原因它不起作用。这是我编写的快速代码,但从未抛出异常。 MSDN 上的 FileIOPremission

using namespace System::Security::Permissions;

FileIOPermission^ f2 = gcnew FileIOPermission( FileIOPermissionAccess::Write,"C:\\");

try {
    f2->Demand();
}
catch (System::Security::SecurityException^ s){
    MessageBox::Show(s->Message); 
}
4

1 回答 1

1

你在这个错误的轨道上。是的,FileIOPermission 不会像您希望的那样做,这是一个与安全相关的类,它允许您编写在沙箱中运行的代码。就像在浏览器中运行的代码一样,阻止它在用户磁盘上散布文件。或读取敏感文件。这在普通 C++/CLI 应用程序中不起作用,它以完全信任的方式运行,使用户可以访问她通常可以访问的所有目录和文件,而不会增加进一步的限制。你没有理由添加额外的。

将文件写入磁盘通常是一项危险的操作。很多事情都可能出错。您在具有许多其他正在访问文件的进程的操作系统上运行您的代码。试图覆盖某个其他进程正在读取的文件将导致异常。磁盘可能已满。用户可能输入了她无权访问的目录名称,这只是另一种失败模式。只需捕获 IOException 并告诉用户它。

当然,从受限用户非常熟悉的目录开始对话框中的旅程。她的 Documents 文件夹是她的“主”目录。如果不是很明显您要转储所选目录中的一大堆文件,那么如果您在目录中看到任何其他文件,则会显示一个温和的提醒。避免“Eek,你做了什么!” 当她发现这里的 Documents 目录突然多了很多文件时,她做出了回应。前几次。当你可以给它一个描述性的名称时,不要犹豫创建你自己的子文件夹,这样就不会发生这种情况。某些包含日期/时间的名称通常可以使用。

于 2012-04-04T21:12:11.153 回答