尝试使用fopen打开桌面上的文件时出现权限被拒绝的错误。

3
我尝试运行以下代码,但返回EACCESS(权限被拒绝)。我真的不知道为什么。我甚至尝试以管理员模式运行VS,但没有成功。它总是能正常工作..也许是因为它是Windows通用应用程序?
auto err = _wfopen_s(&f, L"C:/Users/Lukas/Desktop/Audio.mp3", L"rb");
if (err > 0)
    return;

fseek(f, SEEK_END, 0);
unsigned int size = ftell(f);
fseek(f, SEEK_SET, 0);

char *data = new char[size];
fread(data, 1, size, f);

fclose(f);

你确定这个文件没有被其他地方打开(可能是你自己的程序中没有调用fclose(),或者是其他程序)吗? - nos
@nos 是的,我是。我重新启动了计算机,在初始化TCP之后立即调用了这段代码。 - Quest
我不确定通用应用程序,但对于传统的Windows程序,“GetLastError()”应该返回导致C RTL“EACCESS”错误的基础Windows操作系统错误。它能给你更多信息吗? - Josh Kelley
@JoshKelley GetLastError 输出了 5.. 不确定如何检查它是什么。 - Quest
@Ferruccio 我已经尝试了不同的文件。 - Quest
显示剩余2条评论
1个回答

4
这是通用Windows应用预期的行为。 Windows Runtime应用程序在沙箱中运行,无法访问任意文件系统部分。它们只能直接访问(例如通过fopen等方式)其appx包(只读)和应用数据(读写)目录。所有其他位置都需要经过StorageFile和StorageFolder代理对象的用户授权才能访问。
要在桌面上访问您的MP3,您需要使用文件选择器(或类似工具)让用户选择它,并获取具有适当权限的StorageFile,然后可以使用AccessCache类将其缓存以供以后使用。或者,将MP3放入音乐库中,应用程序可以声明音乐库功能并通过KnownFolders.MusicLibrary文件夹获取StorageFile。
我在我的博客文章中详细介绍了这一点:http://blogs.msdn.com/b/wsdevsol/archive/2012/12/05/stray-from-the-path-stick-to-the-storagefile.aspx

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接