【问题标题】:Saving file using the QFileDialog::getSaveFileName to restricted location doesn't give error message使用 QFileDialog::getSaveFileName 将文件保存到受限位置不会给出错误消息
【发布时间】:2012-09-24 13:42:51
【问题描述】:

我正在 MAC 上处理示例 QT 项目并保存文件,我正在使用带有本机对话框的 QFileDialog::getSaveFileName API,如果我将文件保存到只读目录,它仍然会被保存!!!但行为应该是它应该给出错误信息。当我在 Windows 系统上观察到一切正常时,它会给出错误消息,但在 MAC id 上没有人能早点遇到这个问题吗?

【问题讨论】:

  • 您确定该目录对您的用户是只读的吗?如果 OSX 允许在只读目录中创建文件,我会感到非常惊讶。最后,这不是由 Qt 处理的,而是由操作系统处理的......
  • 我只是好奇所以只是创建了一个对所有人具有只读权限的目录然后尝试保存文件并保存了!!!..但是通过使用可可本机对话它不允许但但是通过使用 Qt API 可以做到
  • 您是否真的创建了一个文件,或者您只是从 QFileDialog::getSaveFileName() 获得了一个文件名?在文档中没有提到文件权限,因此它们可能会被忽略,并且应用程序必须向用户发出此类错误信号。
  • 您能否向我们展示您在 Windows 和 OSX 上运行的代码并展示了您观察到的行为?您能否确认您在 Windows 和 OSX 上尝试过相同的代码?

标签: macos qt qfiledialog


【解决方案1】:

getSaveFileName() 只是返回用户选择位置的路径。它实际上并没有创建任何文件。在您尝试实际创建/写入文件之前,权限不是问题。

【讨论】:

  • 奇怪的是,sandy 写道,他观察到 OSX 和 Windows 之间的不同行为,所以我怀疑他真的创建了一个文件...
  • 是的,我实际上以只读权限手动创建了文件,然后我使用 getSaveFileName() 将一些 x 文件存储到该位置,这是我的代码 QString fileName = QFileDialog::getSaveFileName(NULL, "导出目录", lastExportDir, filters.join(";;"),NULL,QFileDialog::ShowDirsOnly); ...我在哪里使用一些过滤器,然后 lastExportDir 指向最后一个导出的目录,顾名思义。
  • 是的,但从您所说的看来,您似乎希望 getSaveFileName() 尊重权限,但它永远不会这样做,因为它实际上并没有做任何需要权限的事情。
  • 是的,没错,但我对它在 Windows 上可以正常工作但在 Mac 上无法正常工作这一事实感到困惑,我通过手动检查所选文件夹的权限及其工作来解决了这个问题!!。
猜你喜欢
  • 2017-11-24
  • 2010-12-27
  • 2012-05-31
  • 2016-10-18
  • 1970-01-01
  • 2014-03-10
  • 2018-03-28
  • 2012-05-14
  • 1970-01-01
相关资源
最近更新 更多