簡體   English   中英

如何正確讀取Windows Phone開發中的隔離文件

[英]how to correctly read from isolated file in windows phone development

我有兩種寫入和讀取文件的方法。

    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文檔獲取源代碼的。

文件在我的wp電動工具中的位置看起來像這樣 我是新手程序員,所以我可能會忽略其他東西

您是否可以嘗試使用ReadToEndAsync從文件異步讀取數據,該方法基本上解析完整的數據並將響應作為一個字符串發送。

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

希望這可以幫助!

我從另一個論壇得到了解決方案

您兩次調用streamReader.ReadToEnd()。 第一次將其記錄到Debug流中,第二次是實際使用的結果。 每次調用時,該方法都會將文件指針移到末尾,第二次沒有任何讀取。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM