【发布时间】:2014-10-23 13:24:03
【问题描述】:
在我当前的项目中,我喜欢使用fopen 或fopen_s 通过“w”选项创建文件。
使用 QT GUI,用户可以选择任何文件名,该文件名基本上是文件对话框的返回字符串 - 类似于 Windows 对话框已知的内容。
QFileDialog::getSaveFileName(this,"Save as...","","all files (*.*)");
但是,取决于创建与否的文件名。
例如,我可以在构建目录“C:/SVN/builds/GUI/temp.txt”中写入文件
我可以在 Windows 桌面“C:/Users/XXX/Desktop/temp.txt”上创建文件
我什至可以在其他构建目录“C:/SVN/builds/foo/bin/Release/temp.txt”中创建文件
但fopen 不允许我创建“C:/temp.txt”并返回“拒绝访问”(errorno 13)
我的问题可以像这里描述的那样解决:https://stackoverflow.com/a/4735652/2220850
但这实际上需要用户拥有管理员权限才能让我这个愚蠢的小工具正常运行。
那么是否还有其他方法可以获取写入用户从 GUI 中选择的文件的权限?
或者至少对于用户和我来说,有一种方法可以知道我们的工具可能会或可能不会在磁盘上创建文件的位置吗?
干杯
【问题讨论】:
-
有一些 Shell API 可以找出把东西放在哪里。
-
“KNOWNFOLDERID”和“CSIDL”的 MSDN。
标签: c qt file-permissions fopen access-denied