Exportar (0) Imprimir
Expandir Tudo
Este artigo foi traduzido por máquina. Coloque o ponteiro do mouse sobre as frases do artigo para ver o texto original. Mais informações.
Tradução
Original

Método PipeStream.Read

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)

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

Parâmetros

buffer
Tipo: System.Byte[]
Quando esse método retorna, contém a matriz de bytes especificado com os valores entre offset e (offset + count - 1) substituído pelos bytes lidos na fonte atual.
offset
Tipo: System.Int32
O deslocamento de byte na buffer array no qual os bytes lidos serão colocados.
count
Tipo: System.Int32
O número máximo de bytes a serem lidos.

Valor de retorno

Tipo: System.Int32
O número total de bytes que são lidos na buffer. Isso pode ser menor do que o número de bytes solicitados se esse número de bytes não está atualmente disponível, ou 0 se o fim do fluxo for atingido.

ExceçãoCondição
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 conexão ou a alça não foi definido.

IOException

Qualquer erro de e/S.

Use o CanRead propriedade para determinar se o atual PipeStream objeto suporta operações de leitura.

Chamar o Read método bloqueia até count bytes são lidos ou o final do fluxo é alcançado. 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 a 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 são parte do mesmo exemplo. A parte de servidor do exemplo cria um processo do 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

Com suporte em: 4.5.2, 4.5.1, 4.5, 4, 3.5

.NET Framework Client Profile

Com suporte em: 4, 3.5 SP1

Windows Phone 8.1, Windows Phone 8, Windows 8.1, Windows Server 2012 R2, Windows 8, Windows Server 2012, Windows 7, Windows Vista SP2, Windows Server 2008 (Função Server Core sem suporte), Windows Server 2008 R2 (Função Server Core com suporte com o SP1 ou posterior, Itanium sem suporte)

O .NET Framework não oferece suporte a todas as versões de cada plataforma. Para obter uma lista das versões com suporte, consulte Requisitos do sistema do .NET Framework.

Contribuições da comunidade

ADICIONAR
A Microsoft está realizando uma pesquisa online para saber sua opinião sobre o site do MSDN. Se você optar por participar, a pesquisa online lhe será apresentada quando você sair do site do MSDN.

Deseja participar?
Mostrar:
© 2014 Microsoft