c # UWP ReadTextAsync не удается в 2 раза - PullRequest
0 голосов
/ 10 марта 2019

Итак, я пытаюсь импортировать 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 Ответ

0 голосов
/ 11 марта 2019

Если вы создали асинхронный метод. пожалуйста, избегайте синхронного вызова с 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;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...