#c# #uwp #io
#c# #uwp #io
Вопрос:
Итак, я пытаюсь импортировать 2 конфигурации из локальной папки с помощью Windows.Storage
. Но во второй раз он завершается с ошибкой без исключения. Это мой код:
public async Task<string> ImportLines(string filename)
{
try
{
Windows.Storage.StorageFile importFile = await StorageFolder.GetFileAsync(filename);
string savedString = await Windows.Storage.FileIO.ReadTextAsync(importFile);
return savedString;
}
catch (Exception)
{
//log
}
}
Я вызываю этот метод с:
public async void LoadConfig()
{
if (File.Exists(_textDataHandler.StorageFolder.Path @"" PluginsFilename))
{
string tmp = await _textDataHandler.ImportLines(PluginsFilename);
Plugins = JsonConvert.DeserializeObject<PluginConfiguration>(tmp);
}
else
{
CreateDefaultPluginsConfiguration();
//log
_textDataHandler.CreateFile(_pluginsFilename);
string export = JsonConvert.SerializeObject(Plugins, Formatting.Indented);
_textDataHandler.ExportText(_pluginsFilename, export);
//log
}
if (File.Exists(_textDataHandler.StorageFolder.Path @"" _settingsFilename))
{
string tmp = await _textDataHandler.ImportLines(Settingsfilename);
Config = JsonConvert.DeserializeObject<Configuration>(tmp);
_textDataHandler.CreateFile(Config.DatabaseFilename);
}
else
{
CreateDefaultSettingsConfiguration();
//log
_textDataHandler.CreateFile(_settingsFilename);
string export = JsonConvert.SerializeObject(Config, Formatting.Indented);
_textDataHandler.ExportText(_settingsFilename, export);
//Log
}
}
Если одна конфигурация не существует, все в порядке, но если обе существуют, она завершается с ошибкой во второй раз
Комментарии:
1. У меня не так много знаний в этой области, вы проверили эти образцы? github.com/Microsoft/Windows-universal-samples/tree/master /…
Ответ №1:
Если вы создали асинхронный метод. пожалуйста, избегайте синхронного вызова с GetResult
. Вы могли бы добавить await
ключевое слово перед вызывающей строкой.
private async void Button_Click(object sender, RoutedEventArgs e)
{
string tmp = await ImportLines(Filename);
}
Обновить
Пожалуйста, попробуйте использовать dataReader
для чтения содержимого файла.
public async Task<string> ImportLines(string filename)
{
try
{
StorageFile importFile = await ApplicationData.Current.LocalFolder.GetFileAsync(filename);
var buffer = await FileIO.ReadBufferAsync(importFile);
using (var dataReader = Windows.Storage.Streams.DataReader.FromBuffer(buffer))
{
return dataReader.ReadString(buffer.Length);
}
}
catch (Exception ex)
{
return ex.Message;
}
}
Комментарии:
1. У меня было
await
ключевое слово передGetResult
, но у меня была та же проблема.2. Пожалуйста, поделитесь своим
ImportLines
методом, я тестировал публичную асинхронностьTask<string> ImportLines(string filename) { try { Windows.Storage.StorageFile importFile = await ApplicationData.Current.LocalFolder.GetFileAsync(filename); string savedString = await Windows.Storage.FileIO.ReadTextAsync(importFile); return savedString; } catch (Exception ex) { return ex.Message; } }
, она работает хорошо.3. Да, но это ничего не меняет, потому что оно работает до
ReadBufferAsync
, а затем останавливается.