【问题标题】:Cannot read any files or directories outside of my application directory无法读取我的应用程序目录之外的任何文件或目录
【发布时间】:2016-03-08 10:59:05
【问题描述】:

这是一个非常烦人的问题,它会让我发疯。我喜欢阅读文件、目录等信息。但我的应用在它运行的文件夹之外找不到任何东西。

我正在使用 Visual Studio 2015 并开发 Windows 通用应用程序。

如果我更改应用程序运行的文件夹内的目录(如“资产”和任何其他文件夹),则此例程运行良好。但是在我的应用程序文件夹之外,结果为零,甚至没有任何错误:-(

好的,这是简单的代码,我做错了什么?

private void GetThem_Click(object sender, RoutedEventArgs e)
{
    string myDir = @"c:\mydir\";
    string[] files;
    files = Directory.GetFiles(myDir,"*.jpg");

    foreach (string stuff in files)
    {
        RESULT.Text = RESULT.Text + stuff + " , ";
    }
}

【问题讨论】:

  • 以管理员权限运行 VS 2015

标签: c# directory getfiles


【解决方案1】:

快速搜索会为您提供answer:无法像经典桌面应用程序那样访问文件系统。 @Rico Suter 的答案向您解释了您可以访问什么以及如何访问:

  • 在清单文件中声明的目录(例如 Documents、Pictures、Videos 文件夹)
  • 用户使用 FileOpenPicker 或 FolderPicker 手动选择的目录和文件
  • FutureAccessList 或 MostRecentlyUsedList 中的文件
  • 通过文件扩展名关联或通过共享打开的文件

一旦用户选择了一个文件,您可以将其添加到 MostRecentlyUsedList 或 FutureAccessList 以便稍后使用来自MSDN 的这个 sn-p (C#) 再次使用它:

StorageFile file = await savePicker.PickSaveFileAsync();
if (file != null)
{
   // Add to MRU with metadata (For example, a string that represents the date)
   string mruToken = Windows.Storage.AccessCache.StorageApplicationPermissions.MostRecentlyUsedList.Add(file, "20120716");

   // Add to FA without metadata
   string faToken = Windows.Storage.AccessCache.StorageApplicationPermissions.FutureAccessList.Add(file);  
}

然后存储检索到的令牌,因为您将需要它来使用GetFileAsync(token) 访问文件

【讨论】:

  • 因此,例如,如果我的文件位于驱动器 D: E: 或类似的地方,我无法在没有 "Picker" 的情况下访问文件?这听起来很疯狂......(好吧,不知何故也是个好主意)任何想法(或网络中快速简单的示例)如何使用FutureAccessList?听起来这是存储用户有权使用的文件夹的唯一方法..
  • 是的,这就是沙盒应用程序的重点,您不能直接访问文件。这可确保用户数据受到保护。有关 FutureAccessList 和 MostRecentlyUsedList 的用法,请参阅我编辑的答案。
  • 太棒了。我需要做一些小的改动来获取文件夹,现在它似乎开始工作了。感谢您的帮助!
  • 如果答案帮助您解决了问题,您可以考虑将其标记为accepted 吗?谢谢 !干杯
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-18
  • 2021-05-06
  • 1970-01-01
  • 1970-01-01
  • 2018-08-19
  • 1970-01-01
相关资源
最近更新 更多