В общем, более простой способ обработки файла - использовать эти методы в документе , например:
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, как указано Юра Кириченко
в его ответе.