2016-01-17 3 views
0

У меня есть два метода для написания и чтения из файла.как правильно читать из изолированного файла при разработке Windows-телефона

public static async Task WriteDataToFileAsync(string fileName, string content) 
    { 
     byte[] data = Encoding.Unicode.GetBytes(content); 

     var folder = ApplicationData.Current.LocalFolder; 
     var file = await folder.CreateFileAsync(fileName, CreationCollisionOption.OpenIfExists); 

     using (var s = await file.OpenStreamForWriteAsync()) 
     { 
      await s.WriteAsync(data, 0, data.Length); 
     } 
    } 



    public async static Task<string> ReadFileContentsAsync() 
    { 
     var folder = ApplicationData.Current.LocalFolder; 

     try 
     { 
      var file = await folder.OpenStreamForReadAsync("MenuData.json"); 

      using (var streamReader = new StreamReader(file)) 
      { 
       Debug.WriteLine(streamReader.ReadToEnd()); 
       return streamReader.ReadToEnd(); 
      } 
     } 
     catch (Exception) 
     { 
      return string.Empty; 
     } 


    } 

, которые затем используются в этих двух методов

public static async void ApiToFileRestaurants() 
    { 
     HttpClient client = new HttpClient(); 
     HttpResponseMessage response = client.GetAsync("http://bonar.si/api/restaurants").Result; 
     response.EnsureSuccessStatusCode(); 
     string responseBody = response.Content.ReadAsStringAsync().Result; 
     await Restaurant.WriteDataToFileAsync("MenuData.json", responseBody); 


    } 

    public async static Task<List<Restaurant>> FileToRestaurantList() 
    { 
     var responseBody = await Restaurant.ReadFileContentsAsync(); 
     List<Restaurant> parsedRestaurants = (List<Restaurant>)Newtonsoft.Json.JsonConvert.DeserializeObject(responseBody, typeof(List<Restaurant>)); 
     return parsedRestaurants; 
    } 

Теперь моя проблема в том, что ReadFileAsync не возвращает результаты, которые я знаю, сохраняются в файле MenuData.json, но вместо этого возвращает пустую строку.

В основном я получал исходный код от msdn documentation.

Расположение файла в электроинструментах wp выглядит как that. Я начинающий программист, поэтому я мог бы забыть что-то еще

+0

Вы уверены, что вызов api завершил запись до того, как выполняется вызов чтения? – Paul

+0

@Paul да им вполне уверен, что после того, как я проверил несколько тестов – buco

+0

Вы видите состояние, в котором содержимое находится в вашем окне отладки, но не в вашем приложении? – Paul

ответ

2

Можете ли вы попытаться прочитать данные из файла асинхронно с помощью ReadToEndAsync, который в основном анализирует полные данные и отправляет ответ в виде одной строки.

var file = await folder.OpenStreamForReadAsync("MenuData.json"); 
using (var streamReader = new StreamReader(file)) 
{ 
    return await streamReader.ReadToEndAsync(); 
} 

Надеюсь, это поможет!

2

я получил решение от одного другого форума

Вы звоните streamReader.ReadToEnd() дважды. В первый раз, когда вы регистрируете в потоке Debug, второй - это то, что вы на самом деле используете в качестве результата . Метод перемещает указатель файла до конца каждый раз, когда вызывается , и во второй раз читать нечего.

поэтому удаление этой строки отладки почти исправлено. Я получил строку, которую хотел, но была ошибка где-то в нем, так что Newtonsoft.Json было трудно разобрать его. Так что я попробовал решение @asitis и изменил .json на .text, и он сработал

 Смежные вопросы

  • Нет связанных вопросов^_^