2
    public static async Task SaveFileAsync(string FileName, T data)
    {
        MemoryStream memStream = new MemoryStream();
        DataContractSerializer serializer = new DataContractSerializer(typeof(T));
        serializer.WriteObject(memStream, data);

        StorageFile file = await ApplicationData.Current.LocalFolder.CreateFileAsync(FileName,
            CreationCollisionOption.ReplaceExisting);
        using (Stream stream = await file.OpenStreamForWriteAsync())
        {
            memStream.Seek(0, SeekOrigin.Begin);
            await memStream.CopyToAsync(stream);
            await stream.FlushAsync();
        }
    }

    public static async Task<T> RestoreFileAsync(string FileName)
    {
        T result = default(T);
        try
        {
            StorageFile file = await ApplicationData.Current.LocalFolder.GetFileAsync(FileName);
            using (IInputStream inStream = await file.OpenSequentialReadAsync())
            {
                DataContractSerializer serializer = new DataContractSerializer(typeof(T));
                result = (T)serializer.ReadObject(inStream.AsStreamForRead());
                return result;
            }
        }

        catch (FileNotFoundException)
        {
            return default(T);
        }
    }

我正在使用此代码来保存和检索我的数据,它工作正常。有时我启动我的应用程序,突然所有数据都被删除了,我真的不知道为什么。我尝试DataContractJsonSerializer将其保存为 .txt 文件,但仍然是同样的问题。没有异常或错误。我还检查了它自己的文件,.xml 和 .txt 删除了所有内容。我其实很困惑。

4

1 回答 1

2

像这样的问题通常是锁定问题。当应用程序关闭并且生成的文件为空时,您将打开流。这是意料之中的。有时,您在多个单元测试中使用异步操作会产生竞争条件。这是意料之中的。您可以通过锁定线程来解决此问题。

阅读这篇文章,看看它是否对您有帮助:http: //blog.jerrynixon.com/2013/02/walkthrough-locking-asynchronous-file.html我真的希望它可以。

于 2013-02-18T19:22:45.877 回答