Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
.NET Framework para aplicaciones para UWP es un subconjunto de .NET Framework completo. Debido a la seguridad y otros requisitos de las aplicaciones para UWP, no puedes usar el conjunto completo de API de .NET Framework para abrir y leer archivos. Para obtener más información, consulta Introducción a .NET para aplicaciones para UWP. Sin embargo, es posible que quiera usar las API de .NET Framework para otras operaciones de manipulación de flujos. Para manipular estos flujos, puede convertir entre un tipo de flujo de .NET Framework, como MemoryStream o FileStream, y una secuencia de Windows Runtime, como IInputStream, IOutputStreamo IRandomAccessStream.
La System.IO.WindowsRuntimeStreamExtensions clase contiene métodos que facilitan estas conversiones. Sin embargo, las diferencias subyacentes entre los flujos de .NET Framework y Windows Runtime afectan a los resultados del uso de estos métodos, como se describe en las secciones siguientes:
Conversión de una instancia de Windows Runtime a una secuencia de .NET Framework
Para convertir de una secuencia de Windows Runtime a una secuencia de .NET Framework, use uno de los métodos siguientes System.IO.WindowsRuntimeStreamExtensions :
WindowsRuntimeStreamExtensions.AsStream convierte una secuencia de acceso aleatorio en Windows Runtime en una secuencia administrada en .NET para aplicaciones para UWP.
WindowsRuntimeStreamExtensions.AsStreamForWrite convierte un flujo de salida en Windows Runtime en una secuencia administrada en .NET para aplicaciones para UWP.
WindowsRuntimeStreamExtensions.AsStreamForRead convierte un flujo de entrada en Windows Runtime en una secuencia administrada en .NET para aplicaciones para UWP.
Windows Runtime ofrece tipos de secuencia que admiten solo la lectura, solo la escritura o tanto la lectura como la escritura. Estas funcionalidades se mantienen al convertir una secuencia de Windows Runtime en una secuencia de .NET Framework. Además, si conviertes una secuencia de Windows Runtime a una secuencia de .NET Framework y luego la conviertes de nuevo, obtienes la instancia original de Windows Runtime.
Se recomienda usar el método de conversión que coincida con las funcionalidades de la secuencia de Windows Runtime que quiere convertir. Sin embargo, dado que IRandomAccessStream es legible y escribible (implementa tanto IOutputStream como IInputStream), los métodos de conversión mantienen las funcionalidades de la secuencia original. Por ejemplo, usar WindowsRuntimeStreamExtensions.AsStreamForRead para convertir un IRandomAccessStream no limita la secuencia convertida de .NET Framework a ser solo legible. También es escribible.
Ejemplo: Convertir el acceso aleatorio de Windows Runtime a flujo de .NET Framework
Para convertir de una secuencia de acceso aleatorio de Windows Runtime a una secuencia de .NET Framework, use el WindowsRuntimeStreamExtensions.AsStream método .
En el ejemplo de código siguiente se le pide que seleccione un archivo, lo abra con las API de Windows Runtime y, a continuación, lo convierta en una secuencia de .NET Framework. Lee la secuencia y la envía a un bloque de texto. Normalmente, manipularía la secuencia con las API de .NET Framework antes de generar los resultados.
// Create a file picker.
FileOpenPicker picker = new FileOpenPicker();
picker.SuggestedStartLocation = PickerLocationId.DocumentsLibrary;
picker.ViewMode = PickerViewMode.List;
picker.FileTypeFilter.Add(".txt");
// Show picker, enabling user to pick one file.
StorageFile result = await picker.PickSingleFileAsync();
if (result != null)
{
try
{
// Retrieve the stream. This method returns a IRandomAccessStreamWithContentType.
var stream = await result.OpenReadAsync();
// Convert the stream to a .NET stream using AsStream, pass to a
// StreamReader and read the stream.
using (StreamReader sr = new StreamReader(stream.AsStream()))
{
TextBlock1.Text = sr.ReadToEnd();
}
}
catch (Exception ex)
{
// ...
}
}
Convertir de .NET Framework a un flujo de Windows Runtime
Para convertir de una secuencia de .NET Framework a una secuencia de Windows Runtime, use uno de los métodos siguientes System.IO.WindowsRuntimeStreamExtensions :
WindowsRuntimeStreamExtensions.AsInputStream convierte una secuencia administrada en .NET para aplicaciones para UWP en un flujo de entrada en Windows Runtime.
WindowsRuntimeStreamExtensions.AsOutputStream convierte una secuencia administrada en .NET para aplicaciones para UWP en un flujo de salida en Windows Runtime.
WindowsRuntimeStreamExtensions.AsRandomAccessStream convierte una secuencia administrada en .NET para aplicaciones para UWP en una secuencia de acceso aleatorio que Windows Runtime puede usar para leer o escribir.
Al convertir una secuencia de .NET Framework en una secuencia de Windows Runtime, las funcionalidades de la secuencia convertida dependen de la secuencia original. Por ejemplo, si la secuencia original admite tanto la lectura como la escritura, y llama a WindowsRuntimeStreamExtensions.AsInputStream para convertir la secuencia, el tipo devuelto es un IRandomAccessStream.
IRandomAccessStream implementa IInputStream y IOutputStream, y admite la lectura y escritura.
Los flujos de .NET Framework no admiten la clonación, incluso después de la conversión. Si convierte un flujo de .NET Framework en un flujo de Windows Runtime y llama a GetInputStreamAt o GetOutputStreamAt, que llama a CloneStream, o si llama a CloneStream directamente, se produce una excepción.
Ejemplo: Convertir .NET Framework en flujo de acceso aleatorio de Windows Runtime
Para convertir de un flujo de .NET Framework a un flujo de acceso aleatorio de Windows Runtime, use el método AsRandomAccessStream, como se muestra en el ejemplo siguiente.
Importante
Asegúrese de que la secuencia de .NET Framework que usa admite búsquedas o cópiela en una secuencia que sí lo haga. Puede usar la Stream.CanSeek propiedad para determinarlo.
// Create an HttpClient and access an image as a stream.
var client = new HttpClient();
Stream stream = await client.GetStreamAsync("https://dori-uw-1.kuma-moon.com/en-us/dotnet/images/hub/featured-1.png");
// Create a .NET memory stream.
var memStream = new MemoryStream();
// Convert the stream to the memory stream, because a memory stream supports seeking.
await stream.CopyToAsync(memStream);
// Set the start position.
memStream.Position = 0;
// Create a new bitmap image.
var bitmap = new BitmapImage();
// Set the bitmap source to the stream, which is converted to a IRandomAccessStream.
bitmap.SetSource(memStream.AsRandomAccessStream());
// Set the image control source to the bitmap.
Image1.Source = bitmap;