我想使用UWP应用程序从本地硬盘驱动器(包括子文件夹)中的某个文件夹中读取所有图像文件。
我从FolderPicker开始,以便用户可以选择想要的文件夹:
public async static Task<string> GetFolderPathFromTheUser()
{
FolderPicker folderPicker = new FolderPicker();
folderPicker.ViewMode = PickerViewMode.Thumbnail;
folderPicker.FileTypeFilter.Add(".");
var folder = await folderPicker.PickSingleFolderAsync();
return folder.Path;
}
成功获取文件夹路径后,我试图访问该文件夹:
public async static Task<bool> IsContainImageFiles(string path)
{
StorageFolder folder = await StorageFolder.GetFolderFromPathAsync(path);
IReadOnlyList<StorageFile> temp= await folder.GetFilesAsync();
foreach (StorageFile sf in temp)
{
if (sf.ContentType == "jpg")
return true;
}
return false;
}
然后我得到了下一个例外:
类型&#39; System.UnauthorizedAccessException&#39;的例外情况发生在mscorlib.ni.dll但未在用户代码中处理 WinRT信息:无法访问指定的文件或文件夹(D:\ test)。该项目不在应用程序可以访问的位置(包括应用程序数据文件夹,可通过功能访问的文件夹以及StorageApplicationPermissions列表中的持久项目)。验证文件未标记系统或隐藏文件属性。
那么如何才能获取从文件夹中读取文件的权限?
感谢。
答案 0 :(得分:4)
从文件选择器中获取文件夹后,您可能无法通过其路径访问该文件夹。您需要直接使用返回的StorageFolder实例:
<UserControl.Style>
<Style TargetType="UserControl">
<Style.Triggers>
<Trigger Property="IsKeyboardFocusWithin" Value="True">
<Setter Property="FocusManager.FocusedElement" Value="{Binding ElementName=keyPressPlaceHoler}" />
</Trigger>
</Style.Triggers>
</Style>
</UserControl.Style>
如果您想稍后访问它,则应将其添加到future access list并保留返回的令牌:
public async static Task<IStorageFolder> GetFolderPathFromTheUser()
{
FolderPicker folderPicker = new FolderPicker();
folderPicker.ViewMode = PickerViewMode.Thumbnail;
folderPicker.FileTypeFilter.Add(".");
var folder = await folderPicker.PickSingleFolderAsync();
return folder;
}
public async static Task<bool> IsContainImageFiles(IStorageFolder folder)
{
IReadOnlyList<StorageFile> temp= await folder.GetFilesAsync();
foreach (StorageFile sf in temp)
{
if (sf.ContentType == "jpg")
return true;
}
return false;
}