Instrukcje: konwertowanie między strumieniami .NET Framework i środowisko wykonawcze systemu Windows (tylko system Windows)
Program .NET Framework dla aplikacji platformy UWP jest podzbiorem pełnego programu .NET Framework. Ze względu na zabezpieczenia i inne wymagania dotyczące aplikacji platformy UWP nie można używać pełnego zestawu interfejsów API programu .NET Framework do otwierania i odczytywania plików. Aby uzyskać więcej informacji, zobacz Omówienie platformy .NET dla aplikacji platformy UWP. Jednak może być wymagane użycie interfejsów API programu .NET Framework w celu wykonywania innych operacji na strumieniach. Aby manipulować tymi strumieniami, możesz przekonwertować między typem strumienia programu .NET Framework, takim jak MemoryStream lub , FileStreami strumieniem środowisko wykonawcze systemu Windows, takim jak IInputStream, IOutputStreamlub IRandomAccessStream.
Klasa System.IO.WindowsRuntimeStreamExtensions zawiera metody, które ułatwiają te konwersje. Jednak podstawowe różnice między programem .NET Framework i strumieniami środowisko wykonawcze systemu Windows wpływają na wyniki korzystania z tych metod, jak opisano w poniższych sekcjach:
Konwertowanie z środowisko wykonawcze systemu Windows na strumień programu .NET Framework
Aby przekonwertować strumień z środowisko wykonawcze systemu Windows na strumień programu .NET Framework, użyj jednej z następujących System.IO.WindowsRuntimeStreamExtensions metod:
WindowsRuntimeStreamExtensions.AsStreamKonwertuje strumień dostępu losowego w środowisko wykonawcze systemu Windows na strumień zarządzany na platformie .NET dla aplikacji platformy UWP.
WindowsRuntimeStreamExtensions.AsStreamForWriteKonwertuje strumień wyjściowy w środowisko wykonawcze systemu Windows na zarządzany strumień na platformie .NET dla aplikacji platformy UWP.
WindowsRuntimeStreamExtensions.AsStreamForReadKonwertuje strumień wejściowy w środowisko wykonawcze systemu Windows na strumień zarządzany na platformie .NET dla aplikacji platformy UWP.
Środowisko wykonawcze systemu Windows oferuje typy strumieni, które obsługują tylko odczyt, zapis lub odczyt i zapis. Te możliwości są zachowywane podczas konwertowania strumienia środowisko wykonawcze systemu Windows na strumień programu .NET Framework. Co więcej, po przekonwertowaniu strumienia środowiska wykonawczego systemu Windows na strumień programu .NET Framework i z powrotem jest przywracane oryginalne wystąpienie strumienia środowiska wykonawczego systemu Windows.
Najlepszym rozwiązaniem jest użycie metody konwersji zgodnej z możliwościami strumienia środowisko wykonawcze systemu Windows, który chcesz przekonwertować. Jednak ponieważ IRandomAccessStream jest czytelny i zapisywalny (implementuje zarówno metody konwersji, jak IOutputStream i IInputStream), metody konwersji utrzymują możliwości oryginalnego strumienia. Na przykład użycie metody WindowsRuntimeStreamExtensions.AsStreamForRead do konwersji IRandomAccessStream elementu nie ogranicza przekonwertowanego strumienia programu .NET Framework do odczytu. Jest również zapisywalny.
Przykład: konwertowanie środowisko wykonawcze systemu Windows losowego dostępu do strumienia programu .NET Framework
Aby przekonwertować strumień z środowisko wykonawcze systemu Windows losowego dostępu do strumienia programu .NET Framework, użyj WindowsRuntimeStreamExtensions.AsStream metody .
Poniższy przykład kodu wyświetla monit o wybranie pliku, otwiera go przy użyciu interfejsów API środowisko wykonawcze systemu Windows, a następnie konwertuje go na strumień programu .NET Framework. Odczytuje strumień i wyprowadza go do bloku tekstowego. Zwykle można manipulować strumieniem za pomocą interfejsów API programu .NET Framework przed wyprowadzeniem wyników.
// 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)
{
// ...
}
}
Konwertowanie z programu .NET Framework na strumień środowisko wykonawcze systemu Windows
Aby przekonwertować strumień programu .NET Framework na strumień środowisko wykonawcze systemu Windows, użyj jednej z następujących System.IO.WindowsRuntimeStreamExtensions metod:
WindowsRuntimeStreamExtensions.AsInputStreamKonwertuje strumień zarządzany na platformie .NET dla aplikacji platformy UWP na strumień wejściowy w środowisko wykonawcze systemu Windows.
WindowsRuntimeStreamExtensions.AsOutputStreamKonwertuje strumień zarządzany na platformie .NET dla aplikacji platformy UWP na strumień wyjściowy w środowisko wykonawcze systemu Windows.
WindowsRuntimeStreamExtensions.AsRandomAccessStreamKonwertuje strumień zarządzany na platformie .NET dla aplikacji platformy UWP na strumień dostępu losowego, którego środowisko wykonawcze systemu Windows może używać do odczytu lub zapisu.
Podczas konwertowania strumienia programu .NET Framework na strumień środowisko wykonawcze systemu Windows możliwości przekonwertowanego strumienia zależą od oryginalnego strumienia. Jeśli na przykład oryginalny strumień obsługuje zarówno odczyt, jak i zapis, i wywołujesz WindowsRuntimeStreamExtensions.AsInputStream metodę konwersji strumienia, zwracany typ to IRandomAccessStream
. IRandomAccessStream
implementuje IInputStream
i IOutputStream
obsługuje odczytywanie i pisanie.
Strumienie programu .NET Framework nie obsługują klonowania, nawet po konwersji. W przypadku konwersji strumienia programu .NET Framework na strumień środowisko wykonawcze systemu Windows i wywołanie metody lub GetOutputStreamAt, które CloneStreamwywołają metodę , lub w przypadku bezpośredniego wywołania GetInputStreamAtCloneStream wystąpi wyjątek.
Przykład: konwertowanie programu .NET Framework na strumień z dostępem losowym środowisko wykonawcze systemu Windows
Aby przekonwertować strumień programu .NET Framework na strumień środowisko wykonawcze systemu Windows strumienia z dostępem losowym, użyj AsRandomAccessStream metody , jak pokazano w poniższym przykładzie:
Ważne
Upewnij się, że używany strumień programu .NET Framework obsługuje wyszukiwanie lub skopiuj go do strumienia, który wykonuje. Możesz użyć Stream.CanSeek właściwości , aby to określić.
// 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;