Я не могу заставить работать файл и следил за всеми постами - PullRequest
0 голосов
/ 31 октября 2019

Я добавил текстовый файл через Как вы можете видеть из моего кода, я реализовал их код. При запуске он получает System.AggregateException с сообщением «доступ запрещен к пути»

Я читаю сообщения: https://docs.microsoft.com/en-us/xamarin/xamarin-forms/data-cloud/data/files?tabs=windows https://forums.xamarin.com/discussion/64887/how-to-read-write-files

Вот мой код:

using System.IO;
using System.Reflection;
using System.ComponentModel;

using Xamarin.Forms;
using System;
using System.Threading.Tasks;

namespace ReadTxt
{
    // Learn more about making custom code visible in the Xamarin.Forms previewer
    // by visiting https://aka.ms/xamarinforms-previewer
    [DesignTimeVisible(false)]
    public partial class MainPage : ContentPage
    {


        public MainPage()
        {
            InitializeComponent();



                Label l = new Label()
                {
                    Text = ReadTextLine().Result
                };
                StackLayout s = new StackLayout();
                s.Children.Add(l);
            Content = new ScrollView { Content = s };

            async Task<string> ReadTextLine()
            {
                var backingFile = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "TextFile1.txt");
                using (var writer = File.CreateText(backingFile))
                {
                    await writer.WriteLineAsync("Updated text");
                }

                using (var reader = new StreamReader(backingFile, true))
                {
                    string line;
                    while ((line = await reader.ReadLineAsync()) != null)
                    {

                    }


                    return line;
                }
            }
        } } }

Ответы [ 2 ]

0 голосов
/ 01 ноября 2019

В общем, более простой способ обработки файла - использовать эти методы в документе , например:

   public MainPage()
    {
        InitializeComponent();

        Label l = new Label()
        {
        };
        StackLayout s = new StackLayout();
        s.Children.Add(l);
        Content = new ScrollView { Content = s };

        var backingFile = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "TextFile1.txt");

        File.WriteAllText(backingFile, "updatedText");
        string text = File.ReadAllText(backingFile);

        l.Text = text;
    }

При отладке кода кажется, что вы обновляете текст вsub thread, что недопустимо как в iOS, так и Android. Кроме того, я не думаю, что оператор while необходим при чтении текста из файла. Я изменил ваш код, как показано ниже, и он работает на моей стороне:

public MainPage()
{
    InitializeComponent();

    Label l = new Label()
    {
    };
    StackLayout s = new StackLayout();
    s.Children.Add(l);
    Content = new ScrollView { Content = s };

    ReadTextLine();

    async void ReadTextLine()
    {
        var backingFile = Path.Combine(System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal), "TextFile1.txt");
        using (var writer = File.CreateText(backingFile))
        {
            await writer.WriteLineAsync("Updated text");
        }

        using (var reader = new StreamReader(backingFile, true))
        {
            string line;

            line = await reader.ReadLineAsync();

            Device.BeginInvokeOnMainThread(() => {
                l.Text = line;
            });
        }
    }
}

Я не добавляю разрешения, и он работает на эмуляторе Android Q и симуляторе iOS 13. Вы можете попытаться добавить:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

к AndroidManifest.xml, чтобы запросить разрешения в проекте Android, как указано Юра Кириченко в его ответе.

0 голосов
/ 01 ноября 2019

Вам необходимо добавить разрешения для Android.Manifest

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Проверьте этот ответ. Возможно, это поможет вам Доступ к Xamarin Forms запрещен при записи в файл с FileStream

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...