首页 > 解决方案 > Xamarin.essentials FilePicker 将选定的外部文件复制到缓存文件夹

问题描述

在过去的两周里,我已经成功地将 WPF 应用程序转换为 Xamarin.forms android 应用程序。除了 1 件事外,一切都按预期工作。我已经在网上搜索了几天的解决方案,但找不到有效的解决方案。这是我目前的设置:


我的应用程序应该能够使用 Xamarin.Essientials FilePicker 打开选定的文件,执行一些操作并将文件再次保存到相同的路径。文件选择在以下代码中处理:

        var pickresult = await FilePicker.PickAsync();

        if (pickresult != null)
        {
            try
            {
                var result = await pickresult.OpenReadAsync();
                var reader = new StreamReader(result);
                var jsonstring = reader.ReadToEnd();
                ConfigData = JsonConvert.DeserializeObject<ProjectData>(jsonstring);
                PLC_Data.ProjectLoaded = true;
                L_LoadedProject.Text = pickresult.FileName;

                ProjectData.Filepath = pickresult.FullPath;

                reader.Close();
                result.Close();

                //Load login page
                B_Next.IsEnabled = true;
            }

这就是问题发生的地方。让我逐步说明会发生什么:

当我检查文件路径时,我得到以下字符串:

“/storage/emulated/0/Android/data/com.FAIS.motorconfigapp/cache/2203693cc04e0be7f4f024d5f9499e13/303bc84665374139b6303c03255e9018/config1.json”

因此,FilePicker 将“外部”文件复制到 App 缓存文件夹并从 Apps 缓存文件夹返回文件路径。当我检查这个文件夹时,里面确实有我选择的文件的副本。读取和写入该文件可以正常工作。

现在的实际问题是:为什么 FilePicker 将我选择的文件复制到他的缓存文件夹中,我该如何防止它?用户应该能够从设备上的任何地方选择一个文件,并在同一位置找到更新的文件。

我检查了所有设置,我认为一切都应该是正确的,所以我不明白为什么要创建副本。有人有想法吗?如果您需要更多设置、图片、版本,请询问。

提前致谢

标签: androidxamarinxamarin.formsxamarin.android

解决方案


推荐阅读