android - Xamarin.essentials FilePicker 将选定的外部文件复制到缓存文件夹
问题描述
在过去的两周里,我已经成功地将 WPF 应用程序转换为 Xamarin.forms android 应用程序。除了 1 件事外,一切都按预期工作。我已经在网上搜索了几天的解决方案,但找不到有效的解决方案。这是我目前的设置:
- Xamarin.Froms 安卓应用
- 目标安卓版本:安卓10.0
- 最低安卓版本:安卓7.0
- Xamarin.Essentials 版本:1.6.0
- READ_EXTERNAL_STORAGE 权限
- WRITE_EXTERNAL_STORAGE 权限
我的应用程序应该能够使用 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;
}
这就是问题发生的地方。让我逐步说明会发生什么:
- FilePicker 打开一个文件选择窗口。
- 我导航到“下载”文件夹中的首选文件,可以是任何文件夹。
- 文件被读取并转换为对象
- 文件路径已保存
当我检查文件路径时,我得到以下字符串:
“/storage/emulated/0/Android/data/com.FAIS.motorconfigapp/cache/2203693cc04e0be7f4f024d5f9499e13/303bc84665374139b6303c03255e9018/config1.json”
因此,FilePicker 将“外部”文件复制到 App 缓存文件夹并从 Apps 缓存文件夹返回文件路径。当我检查这个文件夹时,里面确实有我选择的文件的副本。读取和写入该文件可以正常工作。
现在的实际问题是:为什么 FilePicker 将我选择的文件复制到他的缓存文件夹中,我该如何防止它?用户应该能够从设备上的任何地方选择一个文件,并在同一位置找到更新的文件。
我检查了所有设置,我认为一切都应该是正确的,所以我不明白为什么要创建副本。有人有想法吗?如果您需要更多设置、图片、版本,请询问。
提前致谢