2012-04-04 64 views
0

我使用的folderBrowseDialog让用户能够选择程序将保存一些文件的位置。有一个问题,用户可以选择应用程序无法操作的路径,例如“c:\”(程序由用户而非管理员启动)C++ cli检查文件是否可以在这里创建,FolderBrowseDialog

我见过一些程序,建议我更改我的路径到“我的文档”,每当我尝试选择一条USER无法操作的路径时,我无法弄清楚如何去做。 请注意,我使用的是folderBrowseDialog而不是savefiledialog。

所以我想也许我会弹出警告,使用FileIOPermission。但对于一些reasone它不起作用。这里是我写的一个快速代码,但是这个例外永远不会抛出。 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); 
} 

回答

1

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

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

当然,从受限用户非常熟悉的目录开始对话。她的文档文件夹是她的“家”目录。如果您不清楚要转储选定目录中的大量文件,请在目录中看到任何其他文件时显示温和的提示。避免“Eek,你做了什么!”当她发现这里的Documents目录突然有更多的文件。前几次。当你可以给它一个描述性的名字时,不要犹豫,创建你自己的子文件夹,这样不会发生。有些日期/时间的名称通常有效。

+0

那么,你的答案不是很有帮助。我只是试图创建一个简单的程序,节省了一个屏幕拍摄。我问如何检查我是否有权在此文件夹中写入或不写入。 – 2012-04-05 13:22:56

+0

嗯,我回答说。捕获IOException。使用DirectoryInfo :: GetAccessControl()可以使它变得更加复杂。这增加了很多代码,但并没有阻止你必须捕捉异常,因为其他原因你无法检查。您需要编写该代码才能理解答案的有用性。 – 2012-04-05 13:28:52

相关问题