UnmanagedMemoryStream.Write Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Surcharges
Write(ReadOnlySpan<Byte>) |
Écrit un bloc d’octets dans le flux de mémoire non managé actuel à l’aide des données de la plage d’octets fournie. |
Write(Byte[], Int32, Int32) |
Écrit un bloc d'octets dans le flux actuel en utilisant les données d'une mémoire tampon. |
Write(ReadOnlySpan<Byte>)
- Source:
- UnmanagedMemoryStream.cs
- Source:
- UnmanagedMemoryStream.cs
- Source:
- UnmanagedMemoryStream.cs
Écrit un bloc d’octets dans le flux de mémoire non managé actuel à l’aide des données de la plage d’octets fournie.
public:
override void Write(ReadOnlySpan<System::Byte> source);
public:
override void Write(ReadOnlySpan<System::Byte> buffer);
public override void Write (ReadOnlySpan<byte> source);
public override void Write (ReadOnlySpan<byte> buffer);
override this.Write : ReadOnlySpan<byte> -> unit
override this.Write : ReadOnlySpan<byte> -> unit
Public Overrides Sub Write (source As ReadOnlySpan(Of Byte))
Public Overrides Sub Write (buffer As ReadOnlySpan(Of Byte))
Paramètres
- sourcebuffer
- ReadOnlySpan<Byte>
Plage d’octets à partir de laquelle copier les octets dans le flux de mémoire non managé actuel.
S’applique à
Write(Byte[], Int32, Int32)
- Source:
- UnmanagedMemoryStream.cs
- Source:
- UnmanagedMemoryStream.cs
- Source:
- UnmanagedMemoryStream.cs
Écrit un bloc d'octets dans le flux actuel en utilisant les données d'une mémoire tampon.
public:
override void Write(cli::array <System::Byte> ^ buffer, int offset, int count);
public override void Write (byte[] buffer, int offset, int count);
override this.Write : byte[] * int * int -> unit
Public Overrides Sub Write (buffer As Byte(), offset As Integer, count As Integer)
Paramètres
- buffer
- Byte[]
Tableau d'octets à partir duquel les octets peuvent être copiés vers le flux actuel.
- offset
- Int32
Dans la mémoire tampon, offset à partir duquel commence la copie des octets dans le flux actuel.
- count
- Int32
Nombre d'octets à écrire dans le flux actuel.
Exceptions
Le flux est fermé.
La mémoire sous-jacente ne prend pas en charge l’écriture.
- ou -
Une tentative d’écriture dans le flux a été effectuée, et la propriété CanWrite est false
.
- ou -
La valeur count
est supérieure à la capacité du flux.
- ou -
La position est à la fin de la capacité du flux.
Une erreur d’E/S se produit.
Un des paramètres spécifiés est inférieur à zéro.
Le paramètre offset
moins la longueur du paramètre buffer
est inférieur au paramètre count
.
Le paramètre buffer
a la valeur null
.
Exemples
L’exemple de code suivant montre comment lire et écrire dans la mémoire non managée à l’aide de la UnmanagedMemoryStream classe . Un bloc de mémoire non managée est alloué et désaffecté à l’aide de la Marshal classe .
// 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.Text;
using System.Runtime.InteropServices;
unsafe class TestWriter
{
static void Main()
{
// Create some data to read and write.
byte[] message = UnicodeEncoding.Unicode.GetBytes("Here is some data.");
// Allocate a block of unmanaged memory and return an IntPtr object.
IntPtr memIntPtr = Marshal.AllocHGlobal(message.Length);
// Get a byte pointer from the IntPtr object.
byte* memBytePtr = (byte*)memIntPtr.ToPointer();
// Create an UnmanagedMemoryStream object using a pointer to unmanaged memory.
UnmanagedMemoryStream writeStream = new UnmanagedMemoryStream(memBytePtr, message.Length, message.Length, FileAccess.Write);
// Write the data.
writeStream.Write(message, 0, message.Length);
// Close the stream.
writeStream.Close();
// Create another UnmanagedMemoryStream object using a pointer to unmanaged memory.
UnmanagedMemoryStream readStream = new UnmanagedMemoryStream(memBytePtr, message.Length, message.Length, FileAccess.Read);
// Create a byte array to hold data from unmanaged memory.
byte[] outMessage = new byte[message.Length];
// Read from unmanaged memory to the byte array.
readStream.Read(outMessage, 0, message.Length);
// Close the stream.
readStream.Close();
// Display the data to the console.
Console.WriteLine(UnicodeEncoding.Unicode.GetString(outMessage));
// Free the block of unmanaged memory.
Marshal.FreeHGlobal(memIntPtr);
Console.ReadLine();
}
}
Remarques
L’écriture se produit à la position actuelle dans le flux.