【问题标题】:How to access user files?如何访问用户文件?
【发布时间】:2016-09-05 13:40:28
【问题描述】:

我正在开发一个 Windows 10 UWP 应用程序,每当我运行以下代码时,我都会收到以下 execption:

'UnauthorizedAccessException - 对路径 {path name} 的访问被拒绝'。

我已经尝试了几个 windows 文件夹(路径):

  1. 图片,
  2. 视频
  3. 桌面等

这是我的代码:

public async Task GetFiles() // edit added wrapper method for readability
{
    var filePicker = new FileOpenPicker();
    filePicker.FileTypeFilter.Add("*");

    Windows.Storage.StorageFile file = await filePicker.PickSingleFileAsync();

    if (file != null)
    {
        ChosenFiles.ItemsSource = GetFileInfo(file.Path);
    }
}

public List<string> GetFileInfo(string path)
{
    List<string> files = new List<string>();
    string[] allFiles = Directory.GetFiles(path);

    foreach (var file in allFiles)
    {
        FileInfo Info = new FileInfo(file);
        files.Add(Info.Name);
    }

    return files;
}

【问题讨论】:

  • 您是否在应用清单中设置了权限?

标签: c# uwp


【解决方案1】:

System.IO.Directory 似乎只能直接访问应用程序包和应用程序本地存储文件夹。这意味着您应该使用 StorageFile 和 StorageFolder 类来提取您需要的信息。例如:

private async void ButtonBase_OnClick(object sender, RoutedEventArgs args)
{
    var folderPicker = new FolderPicker();

    var folder = await folderPicker.PickSingleFolderAsync();

    if (folder != null)
    {
        ChosenFiles.ItemsSource = await GetFileInfoAsync(folder);
    }
}


public async Task<List<string>> GetFileInfoAsync(StorageFolder folder)
{
    List<string> files = new List<string>();
    var allFiles = await folder.GetFilesAsync();

    foreach (var file in allFiles)
    {
        files.Add(file.Name);
    }

    return files;
}

请注意,如果您选择了一个文件,则无法枚举其邻居,因为您无权访问其父文件夹。因此,对于您的场景,您应该使用 FolderPicker。

【讨论】:

    猜你喜欢
    • 2020-11-28
    • 2016-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多