【问题标题】:Xamarin File Handling Documentation - SpecialFolder.LocalApplicationData doesn't existXamarin 文件处理文档 - SpecialFolder.LocalApplicationData 不存在
【发布时间】:2018-10-13 02:37:00
【问题描述】:

Documentation for Xamarin 表示您可以使用以下内容读取文本文件:

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

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

我可以通过以下方式成功读取解决方案中的文本文件:

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

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

我做错了什么还是文档有误?

【问题讨论】:

    标签: c# android xamarin xamarin.android


    【解决方案1】:

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

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

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

    您可以在多个区域执行此操作,更改为表单的应用程序子类(通常为 App)中的 OnStart 覆盖以允许 await

    protected async override void OnStart()
    {
       ...
    

    您也可以在第一页执行此操作OnAppearing 覆盖:

    protected async override void OnAppearing()
    {
       ...
    

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

    安卓:

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

    iOS:

    score.txt 添加/复制到您的 Xamarin.iOS 项目资源(从技术上讲是任何地方,但对于组织资源来说效果很好),生成操作为 BundleResource

    【讨论】:

    • 谢谢。我错过了将异步添加到子类 OnAppearing() 中。我以为我已经尝试过了,但我猜我的语法错误并误诊了问题。
    • @WillC NP,很高兴它有帮助。
    猜你喜欢
    • 2016-10-29
    • 2013-01-14
    • 1970-01-01
    • 2011-10-05
    • 2015-04-22
    • 1970-01-01
    • 1970-01-01
    • 2019-06-10
    • 1970-01-01
    相关资源
    最近更新 更多