Megosztás a következőn keresztül:


Útmutató: Konvertálás .NET-keretrendszer és Windows-futtatókörnyezet streamek között (csak Windows esetén)

.NET-keretrendszer UWP-alkalmazásokhoz a teljes .NET-keretrendszer egy részhalmaza. Az UWP-alkalmazások biztonsági és egyéb követelményei miatt a fájlok megnyitásához és olvasásához nem használhatja a .NET-keretrendszer API-k teljes készletét. További információ: .NET for UWP apps overview. Előfordulhat azonban, hogy .NET-keretrendszer API-kat szeretne használni más streammanipulációs műveletekhez. A streamek módosításához konvertálhat egy .NET-keretrendszer streamtípust, például MemoryStream vagy FileStream, és egy Windows-futtatókörnyezet streamet, például IInputStream, IOutputStreamvagy IRandomAccessStream.

Az System.IO.WindowsRuntimeStreamExtensions osztály olyan metódusokat tartalmaz, amelyek megkönnyítik ezeket az átalakításokat. A .NET-keretrendszer és Windows-futtatókörnyezet streamek közötti alapvető különbségek azonban befolyásolják az alábbi szakaszokban ismertetett módszerek használatának eredményeit:

Konvertálás Windows-futtatókörnyezet-ról .NET-keretrendszer streamre

Ha Windows-futtatókörnyezet streamről .NET-keretrendszer streamre szeretne konvertálni, használja az alábbi System.IO.WindowsRuntimeStreamExtensions módszerek egyikét:

A Windows-futtatókörnyezet olyan streamtípusokat kínál, amelyek csak olvasást, írást vagy olvasást és írást támogatnak. Ezek a képességek akkor maradnak fenn, ha Windows-futtatókörnyezet streamet alakít át .NET-keretrendszer streamké. Továbbá ha Windows-futtatókörnyezet streamet konvertál egy .NET-keretrendszer streamre, és vissza is kapja az eredeti Windows-futtatókörnyezet-példányt.

Ajánlott a konvertálni kívánt Windows-futtatókörnyezet stream képességeinek megfelelő konverziós módszert használni. IRandomAccessStream Mivel azonban olvasható és írható (mindkettőt IOutputStream implementáljaIInputStream), a konvertálási módszerek fenntartják az eredeti stream képességeit. Az átalakítással WindowsRuntimeStreamExtensions.AsStreamForReadIRandomAccessStream például nem korlátozza a konvertált .NET-keretrendszer stream olvashatóvá alakítása. Írható is.

Példa: Windows-futtatókörnyezet véletlenszerű hozzáférés átalakítása .NET-keretrendszer streamre

Ha Windows-futtatókörnyezet véletlenszerű hozzáférésű streamről .NET-keretrendszer streamre szeretne konvertálni, használja a metódustWindowsRuntimeStreamExtensions.AsStream.

Az alábbi példakód arra kéri, hogy válasszon ki egy fájlt, nyissa meg Windows-futtatókörnyezet API-kkal, majd konvertálja egy .NET-keretrendszer streamre. Beolvassa a streamet, és egy szövegblokkba adja ki. A streamet általában .NET-keretrendszer API-kkal módosíthatja az eredmények kimenete előtt.

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

Konvertálás .NET-keretrendszer-ról Windows-futtatókörnyezet streamre

Ha .NET-keretrendszer streamről Windows-futtatókörnyezet streamre szeretne konvertálni, használja az alábbi System.IO.WindowsRuntimeStreamExtensions módszerek egyikét:

Ha egy .NET-keretrendszer streamet Windows-futtatókörnyezet streamké alakít át, a konvertált stream képességei az eredeti streamtől függenek. Ha például az eredeti stream támogatja az olvasást és az írást, és meghívja WindowsRuntimeStreamExtensions.AsInputStream a stream konvertálását, a visszaadott típus egy IRandomAccessStream. IRandomAccessStream implementálja IInputStream és IOutputStreamtámogatja az olvasást és az írást.

.NET-keretrendszer streamek nem támogatják a klónozást, még az átalakítás után sem. Ha .NET-keretrendszer streamet konvertál egy Windows-futtatókörnyezet streamre, és meghívjaGetInputStreamAt, vagy GetOutputStreamAtCloneStreamha közvetlenül hívCloneStream, kivétel történik.

Példa: .NET-keretrendszer konvertálása Windows-futtatókörnyezet véletlenszerű hozzáférésű streamre

Ha .NET-keretrendszer streamről Windows-futtatókörnyezet véletlenszerű hozzáférésű streamre szeretne konvertálni, használja a AsRandomAccessStream metódust az alábbi példában látható módon:

Fontos

Győződjön meg arról, hogy a használt .NET-keretrendszer stream támogatja a keresést, vagy másolja azt egy olyan streambe, amely igen. Ezt a tulajdonságot Stream.CanSeek használhatja.

// 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;

Lásd még