Xamarin文件处理文档-SpecialFolder.LocalApplicationData不存在

时间:2018-10-11 19:18:00

标签: c# android xamarin xamarin.android

Documentation for Xamarin说,您可以使用以下内容阅读文本文件:

File.ReadAllText(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData), "score.txt"))

“ score.txt”是我的解决方案中的文本文件,但是,在编译和执行该代码时,找不到该文件:

FileNotFoundException

我可以使用以下方法在我的解决方案中成功读取文本文件:

using (var stream = await FileSystem.OpenAppPackageFileAsync("score.txt"))
using (var reader = new StreamReader(stream))

但是我无法使用流读取器,因为在应用打开时我需要读取文件,因此它不能是异步的。

我做错了什么或文档有错吗?

1 个答案:

答案 0 :(得分:1)

  

File.ReadAllText(Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.LocalApplicationData),“ score.txt”))

LocalApplicationData不是本地捆绑资产的位置。您需要先将其从只读应用程序包中复制出来。

  

但是我无法使用流读取器,因为在应用打开时我需要读取文件,因此它不能是异步的。

您可以在多个区域中执行此操作,以将Forms的Application子类中的OnStart替代(通常为App)更改为允许await

protected async override void OnStart()
{
   ...

您也可以在首页OnAppearing覆盖中执行此操作:

protected async override void OnAppearing()
{
   ...

Xamarin.Essentials OpenAppPackageFileAsync将流返回“本地” Android资产或iOS捆绑资源等。因此,您需要将score.txt文件复制到本地项目中

Android:

使用score.txt的构建动作将AndroidResource添加/复制到您的Xamarin.Android项目资产中。

enter image description here

iOS:

score.txt添加/复制到您的Xamarin.iOS项目资源(技术上可以在任何地方使用,但是对于组织资源来说效果很好),构建操作为BundleResource

enter image description here