我有一个UWP项目,并编写了以下代码:
foreach (var foldertype in (Environment.SpecialFolder[])Enum.GetValues(typeof(Environment.SpecialFolder)))
{
//string d = Environment.CurrentDirectory;
var path = Environment.GetFolderPath(foldertype);
var folder = await StorageFolder.GetFolderFromPathAsync(path);
StorageApplicationPermissions.FutureAccessList.Add(folder, folder.Path);
Debug.WriteLine($"Opened the folder: {folder.DisplayName}");
this.MenuFolderItems.Add(new MenuFolderItem(folder));
}它应该枚举所有特殊文件夹,并获取它们的文件夹。但是,在调试时,会发生这样的情况:
foldertype = Desktop
path = "C:\\Users\\cuent\\AppData\\Local\\Packages\\402b6149-1adf-4994-abc9-504111b3b972_a5s740xv383r0\\LocalState\\Desktop"
folder = [ERROR] System.IO.FileNotFoundException: 'The system cannot find the file specified. (Exception from HRESULT: 0x80070002)'我不知道在这里发生了什么,它似乎是附加到安装位置的应用程序的路径。我该怎么解决这个问题?
GetFolderPath()的预期输出在Desktop所在的地方,而不是奇怪的路径。
发布于 2021-06-21 02:12:25
UWP应用程序在访问文件系统时不同于桌面应用程序。UWP应用程序在沙箱中运行,因此UWP应用程序在试图访问文件系统时存在限制。您可以检查这个文档:文件访问权限。该文档列出了UWP应用程序有权访问的所有位置。
回到您的场景中,您首先需要的是broadFileSystemAccess受限功能。此功能使您的应用程序可以使用带有Path参数的StorageFolder.GetFolderFromPathAsync() API。我在上面张贴的文件的最后一部分提到了这一点。
第二个问题是Environment.GetFolderPath API。看起来API将返回指向应用程序本地文件夹中的本地文件夹的路径。但是在应用程序的本地文件夹中没有这样的桌面文件夹,所以您将得到FileNotFoundException。您可能需要像C:\Users\your user name\Desktop那样自行设置正确的路径。在此之后,您的代码应该能够正确工作。
https://stackoverflow.com/questions/68037929
复制相似问题