UnmanagedMemoryStream.CanRead Property
.NET Framework (current version)
Gets a value indicating whether a stream supports reading.
Assembly: mscorlib (in mscorlib.dll)
Property Value
Type: System.Booleanfalse if the object was created by a constructor with an access parameter that did not include reading the stream and if the stream is closed; otherwise, true.
This property indicates whether the current stream object supports reading.
The following code example demonstrates how to read from and write to unmanaged memory using the UnmanagedMemoryStream class. A block of unmanaged memory is allocated and de-allocated using the Marshal class. In this example, an UnmanagedMemoryStream object is passed to a method which checks the CanRead property before attempting to display the contents to the console.
// Note: You must compile this sample using the unsafe flag. // From the command line, type the following: csc sample.cs /unsafe using System; using System.IO; using System.Runtime.InteropServices; using System.Text; unsafe class Program { static void Main() { // Create some data to write. byte[] text = UnicodeEncoding.Unicode.GetBytes("Data to write."); // Allocate a block of unmanaged memory. IntPtr memIntPtr = Marshal.AllocHGlobal(text.Length); // Get a byte pointer from the unmanaged memory block. byte* memBytePtr = (byte*)memIntPtr.ToPointer(); UnmanagedMemoryStream writeStream = new UnmanagedMemoryStream( memBytePtr, text.Length, text.Length, FileAccess.Write); // Write the data. WriteToStream(writeStream, text); // Close the stream. writeStream.Close(); // Create another UnmanagedMemoryStream for reading. UnmanagedMemoryStream readStream = new UnmanagedMemoryStream(memBytePtr, text.Length); // Display the contents of the stream to the console. PrintStream(readStream); // Close the reading stream. readStream.Close(); // Free up the unmanaged memory. Marshal.FreeHGlobal(memIntPtr); } public static void WriteToStream(UnmanagedMemoryStream writeStream, byte[] text) { // Verify that the stream is writable: // By default, UnmanagedMemoryStream objects do not have write access, // write access must be set explicitly. if (writeStream.CanWrite) { // Write the data, byte by byte for (int i = 0; i < writeStream.Length; i++) { writeStream.WriteByte(text[i]); } } } public static void PrintStream(UnmanagedMemoryStream readStream) { byte[] text = new byte[readStream.Length]; // Verify that the stream is writable: // By default, UnmanagedMemoryStream objects do not have write access, // write access must be set explicitly. if (readStream.CanRead) { // Write the data, byte by byte for (int i = 0; i < readStream.Length; i++) { text[i] = (byte)readStream.ReadByte(); } } Console.WriteLine(UnicodeEncoding.Unicode.GetString(text)); } }
Universal Windows Platform
Available since 10
.NET Framework
Available since 2.0
Silverlight
Available since 2.0
Windows Phone Silverlight
Available since 7.0
Available since 10
.NET Framework
Available since 2.0
Silverlight
Available since 2.0
Windows Phone Silverlight
Available since 7.0
Show: