none
关于StreamReader和StreamWriter的小问题 RRS feed

  • 问题

  • 在应用程序退出的时候使用了StreamWriter的Write方法来写入一段Json格式的数据,但是在应用程序加载的时候使用StreamReader读取到的Json字符串总是缺失一部分,这是为什么???
    2015年1月22日 7:54

答案

  • 先用 IsoStoreSpy

    觀察一下存入的資料是否正確.
    也可以試試以下寫法:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Windows.Storage;
    using System.IO;
    
    namespace TextFileDemo
    {
        public class TextFileHelper
        {
            async public static Task<bool> SaveTextFileToIsolateStorageAsync(string filename, string data)
            {
                byte[] fileBytes = System.Text.Encoding.UTF8.GetBytes(data);
                StorageFolder local = Windows.Storage.ApplicationData.Current.LocalFolder;
                var file = await local.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting);
                try
                {
                    using (var s = await file.OpenStreamForWriteAsync())
                    {
                        s.Write(fileBytes, 0, fileBytes.Length);
                    }
                    return true;
                }
                catch
                {
                    return false;
                }
            }
    
            async public static Task<string> LoadTextFileFormIsolateStorageAsync(string filename)
            {
                StorageFolder local = Windows.Storage.ApplicationData.Current.LocalFolder;
    
                string returnvalue = string.Empty;
                try
                {
                    var file = await local.OpenStreamForReadAsync(filename);
                    using (StreamReader streamReader = new StreamReader(file))
                    {
                        returnvalue = streamReader.ReadToEnd();
                    }
    
                }
                catch (Exception ex)
                {
    
                    // do somthing when exception
                }
                return returnvalue;
            }
    
    
            async public static Task<string> LoadTextFileFormInstalledLocationAsync(string filename)
            {
                StorageFolder local = Windows.ApplicationModel.Package.Current.InstalledLocation;
                    
                string returnvalue = string.Empty;
                try
                {
                    var file = await local.OpenStreamForReadAsync(filename);
                    using (StreamReader streamReader = new StreamReader(file))
                    {
                        returnvalue = streamReader.ReadToEnd();
                    }
    
                }
                catch (Exception ex)
                {
    
                    // do somthing when exception
                }
                return returnvalue;
            }
        }
    }


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    • 已标记为答案 孟云帆 2015年1月22日 12:59
    2015年1月22日 11:08

全部回复

  • 先用 IsoStoreSpy

    觀察一下存入的資料是否正確.
    也可以試試以下寫法:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Windows.Storage;
    using System.IO;
    
    namespace TextFileDemo
    {
        public class TextFileHelper
        {
            async public static Task<bool> SaveTextFileToIsolateStorageAsync(string filename, string data)
            {
                byte[] fileBytes = System.Text.Encoding.UTF8.GetBytes(data);
                StorageFolder local = Windows.Storage.ApplicationData.Current.LocalFolder;
                var file = await local.CreateFileAsync(filename, CreationCollisionOption.ReplaceExisting);
                try
                {
                    using (var s = await file.OpenStreamForWriteAsync())
                    {
                        s.Write(fileBytes, 0, fileBytes.Length);
                    }
                    return true;
                }
                catch
                {
                    return false;
                }
            }
    
            async public static Task<string> LoadTextFileFormIsolateStorageAsync(string filename)
            {
                StorageFolder local = Windows.Storage.ApplicationData.Current.LocalFolder;
    
                string returnvalue = string.Empty;
                try
                {
                    var file = await local.OpenStreamForReadAsync(filename);
                    using (StreamReader streamReader = new StreamReader(file))
                    {
                        returnvalue = streamReader.ReadToEnd();
                    }
    
                }
                catch (Exception ex)
                {
    
                    // do somthing when exception
                }
                return returnvalue;
            }
    
    
            async public static Task<string> LoadTextFileFormInstalledLocationAsync(string filename)
            {
                StorageFolder local = Windows.ApplicationModel.Package.Current.InstalledLocation;
                    
                string returnvalue = string.Empty;
                try
                {
                    var file = await local.OpenStreamForReadAsync(filename);
                    using (StreamReader streamReader = new StreamReader(file))
                    {
                        returnvalue = streamReader.ReadToEnd();
                    }
    
                }
                catch (Exception ex)
                {
    
                    // do somthing when exception
                }
                return returnvalue;
            }
        }
    }


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。

    • 已标记为答案 孟云帆 2015年1月22日 12:59
    2015年1月22日 11:08
  • 非常感谢您的回答,问题已解决!!!
    2015年1月22日 12:59