Документация по обработке файлов Xamarin - SpecialFolder.LocalApplicationData не существует

Документация для 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 ответ


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

LocalApplicationData не является местоположением родных связанных активов. Вы должны скопировать его сначала из набора только для чтения.

Однако я не могу использовать средство чтения потоков, поскольку мне нужно прочитать файл, когда приложение открывается, поэтому оно не может быть асинхронным.

Вы можете сделать это в нескольких областях, изменив переопределение OnStart в подклассе приложения Forms (обычно App ), чтобы разрешить await

protected async override void OnStart()
{
   ...

Вы также можете сделать это на первой странице OnAppearing override:

protected async override void OnAppearing()
{
   ...

Xamarin.Essentials OpenAppPackageFileAsync возвращает поток в «родной» ресурс Android Asset или iOS и т. Д., Поэтому вам понадобится скопировать файл score.txt в собственные проекты

Android:

Добавьте / скопируйте score.txt в свой проект Xamarin.Android. Активы с действием сборки AndroidResource

введите описание изображения здесь

IOS:

Добавьте / скопируйте score.txt в свои проекты Xamarin.iOS Ресурсы (технически в любом месте, но для организации Ресурсы хорошо работают) с помощью действия сборки BundleResource

введите описание изображения здесь


Есть идеи?

10000