【问题标题】:Does File.Exists not work inside a UWP project?File.Exists 在 UWP 项目中不起作用吗?
【发布时间】:2019-05-13 11:06:55
【问题描述】:

File.Exists(filePath);在控制台应用程序中完美运行,但是当我在 uwp 中执行相同操作时,它不会检测到文件。

我尝试在各种方法上设置断点,并尝试任何可以为我提供有关该问题的信息的方法,但无论我尝试什么,我都没有得到任何信息。

来自 UWP 应用的代码:

            string path = @"C:\Users\Name\Desktop\image.jpg";

                if (File.Exists(path))
                {
                    ProcessFile(path);
                }
                else if (Directory.Exists(path))
                {
                    ProcessDirectory(path);
                }

UWP: 当它点击 File.Exists 时,我得到一个 false 的返回值,是的,我知道图像就在它所在的位置。

控制台: 当它点击 File.Exists 时,我得到一个返回值 true,然后毫无问题地进入被调用的方法。

我希望我的代码能够找到一个文件并将文件路径传递给我的名为“processFile”的方法。

UWP 应用程序是否无法访问其 LocalStorage 之外的文件,还是我没有看到的另一个问题?

【问题讨论】:

  • 如果它是一个打包的应用程序,你应该使用Environment.GetFolderPath(Environment.SpecialFolder.Desktop) 而不是硬编码的绝对路径。

标签: c# uwp


【解决方案1】:

UWP 无法直接访问应用程序文件夹和应用程序数据文件夹之外的文件。这是仅有的两个可通过System.IO API 访问的位置。

如果您启用适当的功能(例如访问库或 broadFileSystemAccess 或使用文件/文件夹选择器),您可以使用 StorageFile API 访问更多位置。特别是,broadFileSystemAccess 允许您访问整个文件系统,但您的应用应该有充分的理由这样做(否则它不会通过 Microsoft Store 认证过程)。

有关更多信息,请参阅Docs

【讨论】:

    【解决方案2】:

    这是正确的。 UWP 应用是沙盒化的,无法以这种方式访问​​ LocalStorage 之外的文件。

    如果你想在用户文件系统上打开一个文件,你必须使用FileOpenPicker.PickSingleFileAsync 或类似的方法来提示用户选择一个文件,然后你就可以使用它了。

    延伸阅读:Working with Files in UWP applications

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-05-18
      • 2015-10-14
      • 2018-07-29
      • 2010-12-15
      • 2016-05-28
      • 1970-01-01
      • 2021-10-29
      相关资源
      最近更新 更多