UWP - 如何将联系人缩略图保存到本地存储?

时间:2016-06-11 19:02:00

标签: c# windows-10 uwp

我想要一些帮助来获取联系人的缩略图并将其保存到本地存储,我成功获得联系人缩略图但我无法从流中获取实际图像,这是我的代码:

mo = nil

此代码在本地存储中创建一个空图像,有什么帮助吗?

感谢您的时间

2 个答案:

答案 0 :(得分:2)

我相信您可能必须在读取之后调用stream.Dispose(),或者使用using指令初始化流:using (var outputStream = stream.GetOutputStreamAt(0))

以下链接可能有用: https://msdn.microsoft.com/en-us/windows/uwp/files/quickstart-reading-and-writing-files?f=255&MSPPError=-2147217396

答案 1 :(得分:2)

这里的问题是你错过了Stream.Flush method来将缓冲区刷新到底层流。您可以在fileStream.Flush();方法之后添加fileStream.WriteAsync来解决问题。

除此之外,我们还需要在完成使用后调用Stream.Dispose Method来释放Stream使用的资源。此方法通过将任何更改写入后备存储并关闭流来释放资源来处理流。因此,我们可以在fileStream.Dispose()方法之后使用fileStream.WriteAsync

调用Dispose方法的推荐方法是使用C#使用语句,如下所示:

var contactStore = await ContactManager.RequestStoreAsync();
var contacts = await contactStore.FindContactsAsync();
var myContact = contacts[0];  //I am sure that this Contact has a Thumbnail

using (var stream = await myContact.Thumbnail.OpenReadAsync())
{
    byte[] buffer = new byte[stream.Size];
    var readBuffer = await stream.ReadAsync(buffer.AsBuffer(), (uint)buffer.Length, InputStreamOptions.None);

    var file = await ApplicationData.Current.LocalFolder.CreateFileAsync("image.jpg", CreationCollisionOption.ReplaceExisting);
    using (var fileStream = await file.OpenStreamForWriteAsync())
    {
        await fileStream.WriteAsync(readBuffer.ToArray(), 0, (int)readBuffer.Length);
    }
}