【问题标题】:winRT storage file issuewinRT存储文件问题
【发布时间】:2013-02-19 03:22:45
【问题描述】:
    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 删除了所有内容。 其实我很困惑。

【问题讨论】:

  • 您在单元测试中看到这种行为了吗?在我的场景中,他们总是得到一个新的本地文件夹。删除内容时 ApplicationData.Current.LocalFolder 会发生变化吗?写简单的文字有问题吗?
  • 是的,删除内容时本地文件夹更改,我没有任何其他问题,没有错误也没有例外,有时并不总是将其删除。
  • 在四处挖掘之后,如果我更改 appxmanifest 中的任何内容,所有内容都会重新安装,但这也不是问题。我一直在测试应用程序,是不是因为我不时从 Visual Studio 运行应用程序?
  • 我想是的。我的单元测试中有这种行为,而不是在运行的应用程序中。你是从模拟器、localpc 还是 remote pc 开始的?这有什么改变吗?
  • 我一直在用一切测试我的应用程序,这是保存行为。

标签: c# windows-8 winrt-xaml c#-5.0


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 2019-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-06-24
    • 2011-01-12
    • 1970-01-01
    • 2012-11-06
    相关资源
    最近更新 更多