Função ReadFileScatter (fileapi.h)

Lê dados de um arquivo e armazena-os em uma matriz de buffers.

A função começa a ler dados do arquivo em uma posição especificada por uma estrutura OVERLAPPED . A função ReadFileScatter opera de forma assíncrona.

Sintaxe

BOOL ReadFileScatter(
  [in]      HANDLE                  hFile,
  [in]      FILE_SEGMENT_ELEMENT [] aSegmentArray,
  [in]      DWORD                   nNumberOfBytesToRead,
            LPDWORD                 lpReserved,
  [in, out] LPOVERLAPPED            lpOverlapped
);

Parâmetros

[in] hFile

Um identificador para o arquivo a ser lido.

O identificador de arquivo deve ser criado com o GENERIC_READ direito e os sinalizadores FILE_FLAG_OVERLAPPED e FILE_FLAG_NO_BUFFERING . Para obter mais informações, consulte Segurança de arquivo e direitos de acesso.

[in] aSegmentArray

Um ponteiro para uma matriz de FILE_SEGMENT_ELEMENT buffers de estrutura que recebe os dados. Para obter uma descrição dessa união, consulte Comentários.

Cada elemento representa uma página de dados.

Observação

Para determinar o tamanho de uma página do sistema, use GetSystemInfo.

A matriz deve conter elementos suficientes para representar bytes de dados nNumberOfBytesToRead . Por exemplo, se houver 40 KB a serem lidos e o tamanho da página for de 4 KB, a matriz deverá ter 10 elementos.

Cada buffer deve ter pelo menos o tamanho de uma página de memória do sistema e deve ser alinhado em um limite de tamanho de página de memória do sistema. O sistema lê uma página de memória do sistema de dados em cada buffer.

A função armazena os dados nos buffers em ordem sequencial. Por exemplo, ele armazena dados no primeiro buffer, depois no segundo buffer e assim por diante até que cada buffer seja preenchido e todos os dados sejam armazenados ou bytes nNumberOfBytesToRead tenham sido lidos.

[in] nNumberOfBytesToRead

O número total de bytes a serem lidos do arquivo. Cada elemento de aSegmentArray contém uma parte de uma página desse total. Como o arquivo deve ser aberto com FILE_FLAG_NO_BUFFERING, o número de bytes deve ser um múltiplo do tamanho do setor do sistema de arquivos em que o arquivo está localizado.

lpReserved

Esse parâmetro é reservado para uso futuro e deve ser NULL.

[in, out] lpOverlapped

Um ponteiro para uma estrutura de dados OVERLAPPED .

A função ReadFileScatter requer uma estrutura OVERLAPPED válida. O parâmetro lpOverlapped não pode ser NULL.

A função ReadFileScatter começa a ler dados do arquivo em uma posição especificada pelos membros Offset e OffsetHigh da estrutura OVERLAPPED .

A função ReadFileScatter pode retornar antes da conclusão da operação de leitura. Nesse cenário, a função ReadFileScatter retorna o valor 0 (zero) e a função GetLastError retorna o valor ERROR_IO_PENDING. Essa operação assíncrona de ReadFileScatter permite que o processo de chamada continue enquanto a operação de leitura é concluída. Você pode chamar as funções GetOverlappedResult, HasOverlappedIoCompleted ou GetQueuedCompletionStatus para obter informações sobre a conclusão da operação de leitura. Para obter mais informações, consulte E/S síncrona e assíncrona.

Valor retornado

Se a função for bem-sucedida, o valor retornado será diferente de zero.

Se a função falhar, o valor retornado será 0 (zero). Para obter informações de erro estendidas, chame a função GetLastError.

Se ReadFileScatter tentar ler além do EOF (fim do arquivo), a chamada para GetOverlappedResult para essa operação retornará FALSE e GetLastError retornará ERROR_HANDLE_EOF.

Se a função retornar antes da conclusão da operação de leitura, a função retornará zero (0) e GetLastError retornará ERROR_IO_PENDING.

Comentários

Essa função não tem suporte para aplicativos de 32 bits pelo WOW64 em sistemas baseados em Itanium.

A estrutura FILE_SEGMENT_ELEMENT é definida da seguinte maneira:

typedef union _FILE_SEGMENT_ELEMENT {
    PVOID64 Buffer;
    ULONGLONG Alignment;
}FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT;

Atribuir um ponteiro ao membro buffer vai assinar e estender o valor se o código for compilado como 32 bits; isso pode interromper aplicativos com reconhecimento de endereço grande em execução em sistemas configurados com ajuste de 4 Gigabytes ou em execução em em WOW64 no Windows de 64 bits. Portanto, use a macro PtrToPtr64 ao atribuir ponteiros ao Buffer.

No Windows 8 e Windows Server 2012, essa função é compatível com as tecnologias a seguir.

Tecnologia Com suporte
Protocolo SMB (SMB) 3.0 Sim
TFO (Failover transparente) do SMB 3.0 Sim
SMB 3.0 com compartilhamentos de arquivos de expansão (SO) Sim
Sistema de arquivos de Volume Compartilhado Clusterizado (CsvFS) Sim
ReFS (Sistema de Arquivos Resiliente) Sim
 

Operações transacionadas

Se houver uma transação associada ao identificador de arquivo, a função retornará dados do modo exibição transacionado do arquivo. É garantido que um identificador de leitura transacionado mostre o mesmo modo de exibição de um arquivo por toda duração do identificador.

Requisitos

   
Cliente mínimo com suporte Windows XP [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2003 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho fileapi.h (inclua Windows.h)
Biblioteca Kernel32.lib
DLL Kernel32.dll

Confira também

CreateFile

FILE_SEGMENT_ELEMENT

Funções de gerenciamento de arquivos

GetOverlappedResult

GetQueuedCompletionStatus

HasOverlappedIoCompleted

OVERLAPPED

ReadFile

ReadFileEx

WriteFileGather