2016-01-17 61 views
0

我有這兩種寫入和讀取文件的方法。如何正確讀取windows phone開發中的獨立文件

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

你可以嘗試從文件中讀取數據asyncronously使用ReadToEndAsync基本上解析完整的數據,並將響應作爲一個字符串。

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

希望這有助於!

2

我接到一個其他論壇

你打電話streamReader.ReadToEnd()兩次的解決方案。第一次將 記錄到調試流中,第二次是您實際使用 結果。該方法將文件指針移動到每次調用 時結束,並且第二次沒有任何可讀的內容。

因此刪除調試行幾乎解決了我的問題。我確實得到了我想要的字符串,但是在它的某個地方出現了錯誤,所以Newtonsoft.Json很難解析它。所以我嘗試@asitis解決方案,並將.json更改爲.text並且它可以正常工作

相關問題