【问题标题】:C++\cli Check if file can be created here, FolderBrowseDialogC++\cli 检查是否可以在这里创建文件,FolderBrowserDialog
【发布时间】:2012-04-04 20:21:24
【问题描述】:

我正在使用文件夹浏览对话框让用户能够选择程序将在哪里保存一些文件。存在用户可以选择应用程序无法操作的路径的问题,例如“c:\”(程序由用户而不是管理员启动)

每当我尝试选择用户无法操作的路径时,我看到一些程序建议我将路径更改为“我的文档”,但是我不知道该怎么做。 请注意,我使用的是 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); 
}

【问题讨论】:

    标签: .net winforms c++-cli folderbrowserdialog


    【解决方案1】:

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

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

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

    【讨论】:

    • 嗯,你的回答不是很有帮助。我只是想创建一个简单的程序来保存屏幕截图。我问我如何检查我是否有权限在这个文件夹中写入。
    • 嗯,我回答了。捕获 IOException。您可以使用 DirectoryInfo::GetAccessControl() 将其任意复杂化。这增加了很多代码,但不会阻止您因为无法预先检查的其他原因而不得不捕获异常。您需要编写该代码才能理解为什么答案会有所帮助。
    猜你喜欢
    • 2021-10-26
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 2019-12-03
    • 1970-01-01
    相关资源
    最近更新 更多