Si le fichier est petit, vous pouvez simplement copier le flux dans un MemoryStream. Je l'ai testé et il fonctionne:
Stream s = await file.OpenForReadAsync();
MemoryStream ms = new MemoryStream();
s.CopyTo(ms);
Cependant, si le fichier est trop volumineux, vous tomberez pour des problèmes de mémoire de sorte que la classe enveloppe de flux suivant peut être utilisé pour corriger le bug de Microsoft (bien que dans les versions futures de windows Phone vous devrez désactiver ce correctif une fois que le bug a été corrigé):
using System;
using System.IO;
namespace WindowsPhoneBugFix
{
/// <summary>
/// Stream wrapper to circumnavigate buggy Stream reading of stream returned by ExternalStorageFile.OpenForReadAsync()
/// </summary>
public sealed class ExternalStorageFileWrapper : Stream
{
private Stream _stream; // Underlying stream
public ExternalStorageFileWrapper(Stream stream)
{
if (stream == null)
throw new ArgumentNullException("stream");
_stream = stream;
}
// Workaround described here - http://stackoverflow.com/a/21538189/250254
public override long Seek(long offset, SeekOrigin origin)
{
ulong uoffset = (ulong)offset;
ulong fix = ((uoffset & 0xffffffffL) << 32) | ((uoffset & 0xffffffff00000000L) >> 32);
return _stream.Seek((long)fix, origin);
}
public override bool CanRead
{
get { return _stream.CanRead; }
}
public override bool CanSeek
{
get { return _stream.CanSeek; }
}
public override bool CanWrite
{
get { return _stream.CanWrite; }
}
public override void Flush()
{
_stream.Flush();
}
public override long Length
{
get { return _stream.Length; }
}
public override long Position
{
get
{
return _stream.Position;
}
set
{
_stream.Position = value;
}
}
public override int Read(byte[] buffer, int offset, int count)
{
return _stream.Read(buffer, offset, count);
}
public override void SetLength(long value)
{
_stream.SetLength(value);
}
public override void Write(byte[] buffer, int offset, int count)
{
_stream.Write(buffer, offset, count);
}
}
}
code
est disponible ici pour déposer à votre projet: https://github.com/gavinharriss/ExternalStorageFileWrapper-wp8
double possible de [fournir partielle composite flux Wrapper MemoryStream et le flux original complet] (http://stackoverflow.com/questions/20836625/composite-stream-wrapper-providing-partial-memorystream-and-full-original-stream) –