UnmanagedMemoryStream.CanWrite Свойство

Определение

Возвращает значение, определяющее, поддерживает ли поток операции записи.Gets a value indicating whether a stream supports writing.

public:
 virtual property bool CanWrite { bool get(); };
public override bool CanWrite { get; }
member this.CanWrite : bool
Public Overrides ReadOnly Property CanWrite As Boolean

Значение свойства

Значение false, если объект был создан конструктором со значением параметра access, которое поддерживает запись, или если объект был создан конструктором без параметров, или если поток закрыт; в противном случае — значение true.false if the object was created by a constructor with an access parameter value that supports writing or was created by a constructor that had no parameters, or if the stream is closed; otherwise, true.

Примеры

В следующем примере кода показано, как выполнять чтение из неуправляемой памяти и запись в нее с помощью класса UnmanagedMemoryStream.The following code example demonstrates how to read from and write to unmanaged memory using the UnmanagedMemoryStream class. Блок неуправляемой памяти выделяется и освобождается с помощью класса Marshal.A block of unmanaged memory is allocated and de-allocated using the Marshal class. В этом примере объект UnmanagedMemoryStream передается в метод, который проверяет свойство CanWrite перед попыткой записи данных в поток.In this example, an UnmanagedMemoryStream object is passed to a method which checks the CanWrite property before attempting to write the data to the stream.

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

Комментарии

Это свойство указывает, поддерживает ли текущий объект потока запись.This property indicates whether the current stream object supports writing.

Применяется к