Read Método (Byte[], Int32, Int32)
Este artigo foi traduzido por máquina. Para visualizar o arquivo em inglês, marque a caixa de seleção Inglês. Você também pode exibir o texto Em inglês em uma janela pop-up, movendo o ponteiro do mouse sobre o texto.
Tradução
Inglês

Método PipeStream.Read (Byte[], Int32, Int32)

 

Lê um bloco de bytes de um fluxo e grava os dados em um buffer especificado.

Namespace:   System.IO.Pipes
Assembly:  System.Core (em System.Core.dll)

[SecurityCriticalAttribute]
public override int Read(
	byte[] buffer,
	int offset,
	int count
)

Parâmetros

buffer

Quando este método retorna, contém a matriz de bytes especificada com os valores entre offset e (offset + count - 1) substituídos pelos bytes lidos da origem atual.

offset

O deslocamento de byte no buffer array no qual os bytes são lidos serão colocados.

count

O número máximo de bytes a serem lidos.

Valor de retorno

Type: System.Int32

O número total de bytes lidos em buffer.Isso pode ser menor que o número de bytes solicitado se esse número de bytes não está disponível no momento, ou 0 se for atingido o fim do fluxo.

Exception Condition
ArgumentNullException

buffer é null.

ArgumentOutOfRangeException

offset é menor que 0.

-ou-

count é menor que 0.

ArgumentException

count é maior que o número de bytes disponíveis em buffer.

ObjectDisposedException

O pipe é fechado.

NotSupportedException

O pipe não oferece suporte a operações de leitura.

InvalidOperationException

O pipe é desconectado, aguardando para conectar-se ou o identificador não tiver sido definido.

IOException

Ocorreu um erro de e/s.

Use o CanRead para determinar se o atual PipeStream objeto oferece suporte a operações de leitura.

Chamar o Read método bloqueia até count bytes são lidos ou o fim do fluxo for atingido.Para operações de leitura assíncronas, consulte BeginRead e EndRead.

O exemplo a seguir cria um cliente de pipe anônimo e o servidor do pipe.O servidor de pipe usa o Read método para ler uma série de bytes do cliente pipe como um código de validação.O cliente de pipe e o servidor do pipe fazem parte do mesmo exemplo.A parte de servidor do exemplo cria um processo de cliente e passa um identificador de pipe anônimo como um argumento.

using System;
using System.IO;
using System.IO.Pipes;
using System.Diagnostics;

class PipeStreamExample
{
    private static byte[] matchSign = {9, 0, 9, 0};

    public static void Main()
    {
        string[] args = Environment.GetCommandLineArgs();
        if (args.Length < 2)
        {
            Process clientProcess = new Process();

            clientProcess.StartInfo.FileName = Environment.CommandLine;

            using (AnonymousPipeServerStream pipeServer =
                new AnonymousPipeServerStream(PipeDirection.In,
                HandleInheritability.Inheritable))
            {
                // Pass the client process a handle to the server.
                clientProcess.StartInfo.Arguments = pipeServer.GetClientHandleAsString();
                clientProcess.StartInfo.UseShellExecute = false;
                Console.WriteLine("[SERVER] Starting client process...");
                clientProcess.Start();

                pipeServer.DisposeLocalCopyOfClientHandle();

                try
                {
                    if (WaitForClientSign(pipeServer))
                    {
                        Console.WriteLine("[SERVER] Valid sign code received!");
                    }
                    else
                    {
                        Console.WriteLine("[SERVER] Invalid sign code received!");
                    }
                }
                catch (IOException e)
                {
                    Console.WriteLine("[SERVER] Error: {0}", e.Message);
                }
            }
            clientProcess.WaitForExit();
            clientProcess.Close();
            Console.WriteLine("[SERVER] Client quit. Server terminating.");
        }
        else
        {
            using (PipeStream pipeClient = new AnonymousPipeClientStream(PipeDirection.Out, args[1]))
            {
                try
                {
                    Console.WriteLine("[CLIENT] Sending sign code...");
                    SendClientSign(pipeClient);
                }
                catch (IOException e)
                {
                     Console.WriteLine("[CLIENT] Error: {0}", e.Message);
                }
            }
            Console.WriteLine("[CLIENT] Terminating.");
        }
    }

    private static bool WaitForClientSign(PipeStream inStream)
    {
        byte[] inSign = new byte[matchSign.Length];
        int len = inStream.Read(inSign, 0, matchSign.Length);
        bool valid = len == matchSign.Length;

        while (valid && len-- > 0)
        {
            valid = valid && (matchSign[len] == inSign[len]);
        }
        return valid;
    }

    private static void SendClientSign(PipeStream outStream)
    {
        outStream.Write(matchSign, 0, matchSign.Length);
    }
}

.NET Framework
Disponível desde 3.5
Retornar ao topo
Mostrar:
© 2016 Microsoft