替代管理员权限 - fopen在Windows中不创建C:\ temp.txt

时间:2014-08-29 13:58:24

标签: c qt file-permissions fopen access-denied

在我当前的项目中,我喜欢使用fopenfopen_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中选择的文件的权限吗?
或者是否至少为用户和我提供了一种了解磁盘上哪些工具可能创建或不创建文件的方法?

欢呼声

2 个答案:

答案 0 :(得分:0)

我认为你不能以干净的方式解决这个问题。非管理员用户禁止使用文件夹。这就是它的方式(没有调整到OS设置)。

向用户显示一条合理的错误消息,例如“拒绝访问(您可能需要管理员权限才能写入此目录,选择您可以写入的目录)”可能是最佳方式。

答案 1 :(得分:0)

读/写shell / OS告诉你可以/应该做的事情。调用shell API以找出适用于Windows操作系统的正确路径:

SHGetFolderPath()
SHGetKnownFolderPath()