是否可以访问本地目录中的文件? (通用 Windows 平台)

is it possible to access files in local directories? (Universal Windows Platform)

我正在尝试了解如何访问本地文件而不是 ms-appx 资源等。但似乎不可能。我错过了什么吗?这个小例子抛出一个错误,但文件确实存在于驱动器 D 的根目录中。在通用 Windows 平台开发中是否可能?或者它可能只是在 PC 上调试时不起作用,但可能在真实设备上 windows IOT?

private void Button_Click(object sender, RoutedEventArgs e)
{
    string path = @"D:\skyblue.jpg";
    Uri uri_ = new Uri(path, UriKind.Absolute);

    var a=Windows.Storage.ApplicationData.Current.LocalFolder;

    Task.Run(() =>{
        if (!File.Exists(path))
         Dispatcher.RunAsync(CoreDispatcherPriority.Low, () =>
        {
            textBlock1.Text = "file not found";//this happens albeit file exists
        });
    });
}

https://channel9.msdn.com/Events/Build/2017/B8012

截至创作者的更新,在该视频的第 32:45 分钟左右,他们确认答案是 "none" -- 他们注意到您不能做的一件事是 "direct access to file system." 那是几个月前的事了,也许您正在使用更新的版本。但作为起点,我认为可以肯定地说文件访问(如果存在的话)是一项新功能。我还没有坐下来了解最新版本的功能,但如果您不是最前沿的,可以肯定地说您无法访问文件系统吗?

您需要使用 File.Exists() 来检查这样一个文件的路径:

        string path = @"D:\test.jpg";
        await Task.Run(() => {
            if (!File.Exists(path))
                throw new FileNotFoundException();
        });

并使用 Directory.Exists() 来检查目录的路径,如下所示:

        path = @"D:\test";
        await Task.Run(() => {
            if (!Directory.Exists(path))
                throw new FileNotFoundException();
        });

您可以找到详细信息here

对于accessing Application data locations有两种方法:

        // Method #1       
        string path = Path.Combine(Windows.Storage.ApplicationData.Current.LocalFolder.Path, "Project1", "1.jpg");

        StorageFile file = await StorageFile.GetFileFromPathAsync(path);

        // Method #2
        StorageFile file1 = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appdata:///local/Project1/1.jpg"));

注:

  1. 您需要为 UWP 应用程序设置文件夹权限。例如,运行 Windows IoT 核心设备上的此命令:FolderPermissions d:\test -e
  2. 您需要像这样声明文件类型:

您是要存储文件还是访问资源?目前尚不清楚您的最终目标。您也没有展示如何创建 path。将此字符串写出以验证它是否在您认为的位置可能会有所帮助。

在我的一些应用程序中,我使用 _PathToPubCacheFolder = ApplicationData.Current.GetPublisherCacheFolder("YourInfoHere").Path; 来存储文件。

https://docs.microsoft.com/en-us/windows/uwp/files/file-access-permissions 是一个很好的参考。