Postupy: Převod mezi rozhraním .NET Framework a datovými proudy prostředí Windows Runtime (pouze Windows)

.NET Framework pro aplikace pro UPW je podmnožinou celého rozhraní .NET Framework. Vzhledem k zabezpečení a dalším požadavkům na aplikace pro UPW nemůžete k otevírání a čtení souborů používat úplnou sadu rozhraní API rozhraní .NET Framework. Další informace najdete v tématu .NET pro aplikace pro UPW – přehled. Rozhraní API pro .NET Framework však můžete použít pro jiné operace manipulace s datovým proudem. Chcete-li manipulovat s těmito datovými proudy, můžete převést mezi typem datového proudu rozhraní .NET Framework, například MemoryStream nebo FileStream, a prostředí Windows Runtime datovým proudem, například IInputStream, IOutputStreamnebo IRandomAccessStream.

Třída System.IO.WindowsRuntimeStreamExtensions obsahuje metody, které tyto převody usnadňují. Základní rozdíly mezi rozhraním .NET Framework a prostředí Windows Runtime datovými proudy však ovlivňují výsledky použití těchto metod, jak je popsáno v následujících částech:

Převod z prostředí Windows Runtime na datový proud rozhraní .NET Framework

Pokud chcete převést z datového proudu prostředí Windows Runtime na datový proud rozhraní .NET Framework, použijte jednu z následujících System.IO.WindowsRuntimeStreamExtensions metod:

Prostředí Windows Runtime nabízí typy datových proudů, které podporují pouze čtení, pouze zápis nebo čtení a zápis. Tyto funkce jsou zachovány při převodu datového proudu prostředí Windows Runtime na datový proud rozhraní .NET Framework. Dále platí, že pokud převedete datový proud Windows Runtime na datový proud rozhraní .NET Framework a zpět, získáte původní instanci Windows Runtime.

Osvědčeným postupem je použít metodu převodu, která odpovídá možnostem datového proudu prostředí Windows Runtime, který chcete převést. Vzhledem k tomu, že IRandomAccessStream je čitelný a zapisovatelný (implementuje jak i IOutputStreamIInputStream), metody převodu udržují schopnosti původního datového proudu. Použití WindowsRuntimeStreamExtensions.AsStreamForRead k převodu IRandomAccessStream například neomezuje převést převedený datový proud rozhraní .NET Framework na čitelný. Je to také zapisovatelné.

Příklad: Převod prostředí Windows Runtime náhodného přístupu na datový proud rozhraní .NET Framework

Pokud chcete převést z datového proudu prostředí Windows Runtime náhodný přístup na datový proud rozhraní .NET Framework, použijte metoduWindowsRuntimeStreamExtensions.AsStream.

Následující příklad kódu vás vyzve k výběru souboru, otevře ho s rozhraními API prostředí Windows Runtime a pak ho převede na datový proud rozhraní .NET Framework. Načte datový proud a vypíše ho do bloku textu. Před výstupem výsledků byste s datovým proudem obvykle manipulovali s rozhraními API rozhraní .NET Framework.

// 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)
    {
        // ...
    }
}       

Převod z rozhraní .NET Framework na datový proud prostředí Windows Runtime

Pokud chcete převést datový proud rozhraní .NET Framework na datový proud prostředí Windows Runtime, použijte jednu z následujících System.IO.WindowsRuntimeStreamExtensions metod:

Při převodu datového proudu rozhraní .NET Framework na datový proud prostředí Windows Runtime závisí možnosti převedeného datového proudu na původním datovém proudu. Pokud například původní datový proud podporuje čtení i zápis a volání WindowsRuntimeStreamExtensions.AsInputStream pro převod datového proudu, vrácený typ je .IRandomAccessStream IRandomAccessStream implementuje IInputStream a IOutputStreampodporuje čtení a zápis.

Streamy rozhraní .NET Framework nepodporují klonování ani po převodu. Pokud převedete datový proud rozhraní .NET Framework na prostředí Windows Runtime datový proud a volání GetInputStreamAt nebo GetOutputStreamAt, které volání CloneStream, nebo pokud voláte CloneStream přímo, dojde k výjimce.

Příklad: Převod rozhraní .NET Framework na prostředí Windows Runtime datového proudu s náhodným přístupem

Pokud chcete převést z datového proudu rozhraní .NET Framework na datový proud prostředí Windows Runtime náhodný přístup, použijte metoduAsRandomAccessStream, jak je znázorněno v následujícím příkladu:

Důležité

Ujistěte se, že datový proud rozhraní .NET Framework, který používáte, podporuje hledání, nebo ho zkopírujte do datového proudu, který to dělá. Tuto vlastnost můžete použít Stream.CanSeek k určení.

// Create an HttpClient and access an image as a stream.
var client = new HttpClient();
Stream stream = await client.GetStreamAsync("https://learn.microsoft.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;

Viz také