无法在WinRT单元测试中打开文件

时间:2012-11-26 16:14:28

标签: serialization windows-runtime storagefile

我正在编写一个单元测试来验证对象的序列化,我能够成功保存文件而没有任何问题。我甚至可以浏览文件并验证内容是否正确。但是,当我尝试打开文件进行读取时,我总是收到UnauthorizedAccess异常。

以下是用于保存项目的代码:

        public static async Task SaveItem<T>(string folderName, T item)
        where T : BaseBusinessItem
    {
        if (string.IsNullOrEmpty(folderName))
        {
            throw new ArgumentNullException("folderName");
        }

        if (item == null)
        {
            throw new ArgumentNullException("item");
        }

        try
        {
            var folder = await ApplicationData.Current.LocalFolder
                                             .CreateFolderAsync(folderName, CreationCollisionOption.OpenIfExists);
            var file =
                await
                folder.CreateFileAsync(item.UniqueID.GetHashCode().ToString(), CreationCollisionOption.ReplaceExisting);
            var stream = await file.OpenAsync(FileAccessMode.ReadWrite);
            using (var outStream = stream.GetOutputStreamAt(0))
            {
                var serializer = new DataContractJsonSerializer(typeof(T));
                serializer.WriteObject(outStream.AsStreamForWrite(), item);
                await outStream.FlushAsync();
            }
        }
        catch (Exception ex)
        {
            Debug.WriteLine(ex.ToString());
        }
    }

以下是用于恢复项目的代码:

    public static async Task<T> RestoreItem<T>(string folderName, string hashCode)
        where T : BaseBusinessItem, new()
    {
        if (string.IsNullOrEmpty(folderName))
        {
            throw new ArgumentNullException("folderName");
        }

        if (string.IsNullOrEmpty(hashCode))
        {
            throw new ArgumentNullException("hashCode");
        }

        var folder = await ApplicationData.Current.LocalFolder.GetFolderAsync(folderName);
        var file = await folder.GetFileAsync(hashCode);
        var inStream = await file.OpenSequentialReadAsync();
        var serializer = new DataContractJsonSerializer(typeof(T));
        var retVal = (T)serializer.ReadObject(inStream.AsStreamForRead());
        return retVal;
    }

单元测试:

    [TestMethod]
    public async Task TestFileSaveLoad()
    {
        await _ds.SaveItem("TestFolder");
        Guid ID = _item.UniqueID;
        _ds = await ItemDataSource.LoadItem("TestFolder", ID.GetHashCode().ToString());
    }

我可能缺少任何想法或疑难解答步骤。单元测试应用程序清单包括以下功能:文档库,Internet(客户端)。以下声明到位:文件打开选择器,文件保存选择器和文件类型关联。

谢谢!

1 个答案:

答案 0 :(得分:0)

此代码段帮助我实现了目标。希望这对其他人有帮助:

http://codepaste.net/gtu5mq