c# - 如何访问 Xamarin.Form 应用程序中的文件?
问题描述
我目前正在使用 Xamarin Form (Android) 编写一个小工具,它获取一些文件内容并以某种特定方式显示它们。在这些文件中,我有一些应该嵌入到文件显示中的交叉链接(例如 jpeg 图像)。
要获取主文件,我正在使用“CrossFilePicker.Current.PickFile()”。它返回一个“FileData”对象,该对象已经包含主文件内容以及该文件的 URI。
如果该文件中有交叉链接,我可以假设链接文件与主文件位于同一文件夹中。
我的想法(以 jpeg 为例)获取文件的基本文件夹并附加 jpeg 的名称,然后将图像作为流打开:
ImagePath = Path.Combine(baseFolder.Trim(), imageFile.Trim());
try
{
fileStream = new FileStream(ImagePath, FileMode.Open, FileAccess.Read);
fileStream.DisposeWith(Disposables);
ImageSource = ImageSource.FromStream(() => fileStream);
ShowImage = true;
}
catch
{
// Ignore
}
不幸的是 FileStream 失败,并声称它找不到包含目录。
通往 JPG 的路径如下所示:
/document/0F1E-120D/TestData/P1060371.jpg
我从 Picker 得到的文件路径是:
content://com.android.externalstorage.documents/document/0F1E-120D%3ATestData%2FTestFile.txt
使用该 URI,我可以提取本地路径:
/document/0F1E-120D:TestData/TestFile.txt
删除文件名时我得到
/document/0F1E-120D:TestData
显然该路径无效...
关于如何获得可以输入 FileStream 以读取文件的有效路径的任何提示?关于我必须注意的权限的更多提示?目前我已经设置了 READ_EXTERNAL_STORAGE
解决方案
如果您使用NetStandard2.0
,请使用此代码
System.IO.File.ReadAllBytes(filePath);
它也适用于特定平台(例如:Xamarin.Android、Xamarin.iOS 等)
推荐阅读
- javascript - this.props 在子组件的 console.log 中工作,但不渲染
- python - 获取节点下所有文本节点的绝对xpath
- c# - 如何将 ELF 转换为原始二进制文件
- node.js - 离子服务时节点模块错误
- android - 为什么gradle任务以错误的顺序运行?
- javascript - 单击其他按钮时如何销毁介绍js?
- neural-network - 计算机视觉:在地图上生成点的神经网络
- shopify - 获取/获取购物车 ID
- node.js - 在 mongoDB 中插入时如何转义 $
- google-cloud-functions - 谷歌 HTTP 云函数返回 403