Método IBackgroundCopyJob3::AddFileWithRanges (bits2_0.h)

Adiciona um arquivo a um trabalho de download e especifica os intervalos do arquivo que você deseja baixar.

Sintaxe

HRESULT AddFileWithRanges(
  [in] LPCWSTR          RemoteUrl,
  [in] LPCWSTR          LocalName,
  [in] DWORD            RangeCount,
  [in] BG_FILE_RANGE [] Ranges
);

Parâmetros

[in] RemoteUrl

Cadeia de caracteres terminada em nulo que contém o nome do arquivo no servidor. Para obter informações sobre como especificar o nome remoto, consulte a seção Membro remoteName e Comentários da estrutura BG_FILE_INFO .

A partir do BITS 3.0, não há suporte para o protocolo SMB para intervalos.

BITS 2.5 e 2.0: O BITS dá suporte ao protocolo SMB para intervalos.

[in] LocalName

Cadeia de caracteres terminada em nulo que contém o nome do arquivo no cliente. Para obter informações sobre como especificar o nome local, consulte a seção LocalName member and Remarks da estrutura BG_FILE_INFO .

[in] RangeCount

Número de elementos em Intervalos.

[in] Ranges

Matriz de uma ou mais estruturas de BG_FILE_RANGE que especificam os intervalos a serem baixados. Não especifique intervalos duplicados ou sobrepostos.

Retornar valor

Esse método retorna os seguintes valores retornados, bem como outros.

Código de retorno Descrição
S_OK
Êxito
E_INVALIDARG
Você pode receber esse erro por um dos seguintes motivos:
  • O parâmetro RangeCount é zero; você deve especificar um ou mais intervalos.
  • O nome do arquivo local ou remoto não é válido.
  • O nome do arquivo remoto usa um protocolo sem suporte.
  • O nome do arquivo local foi especificado usando um caminho relativo.
E_NOTIMPL
Você não pode chamar esse método para trabalhos de upload ou upload-reply; chame esse método apenas para trabalhos de download.
E_ACCESSDENIED
O usuário não tem permissão para gravar no diretório especificado no cliente.
BG_E_INVALID_RANGE
Um dos intervalos é inválido. Por exemplo, InitialOffset é definido como BG_LENGTH_TO_EOF.
BG_E_OVERLAPPING_RANGES
Você não pode especificar intervalos duplicados ou sobrepostos.
Nota Os intervalos são classificados pelo deslocamento do valor, não pelo comprimento. Se forem inseridos intervalos que tenham o mesmo deslocamento, mas estiverem em ordem inversa, esse erro será retornado. Por exemplo, se 100.5 e 100.0 forem inseridos nessa ordem, você não poderá adicionar o arquivo ao trabalho.
 
BG_E_TOO_MANY_RANGES_IN_FILE
A configuração de Política de Grupo MaxRangesPerFile determina quantos intervalos você pode especificar para um arquivo. Adicionar esses intervalos excede o limite de MaxRangesPerFile.
BG_E_INVALID_STATE
O estado do trabalho não pode ser BG_JOB_STATE_CANCELLED ou BG_JOB_STATE_ACKNOWLEDGED.

Comentários

Os intervalos são gravados no arquivo LocalName na ordem fornecida. Por exemplo, se Ranges identificar bytes 100-199, 900-999 e 400-499 do arquivo remoto, o arquivo local terá 300 bytes de comprimento. Bytes 0-99 do arquivo local conterão bytes 100-199 do arquivo remoto, bytes 100-199 do arquivo local conterão bytes 900-999 do arquivo remoto e bytes 200-299 do arquivo local conterão bytes 400-499 do arquivo remoto.

A tabela a seguir identifica possíveis códigos de erro que podem ocorrer depois que você retoma o trabalho. Esses erros colocam o trabalho no estado BG_JOB_STATE_ERROR.

Código do erro Descrição
BG_E_INVALID_SERVER_RESPONSE O BITS não dá suporte a servidores que consolidam intervalos duplicados ou sobrepostos.
BG_E_INVALID_RANGE Um dos intervalos está fora dos limites do arquivo remoto.
BG_E_INSUFFICIENT_RANGE_SUPPORT O servidor não dá suporte a intervalos.
 

O BITS garante que a versão de um arquivo (com base no tamanho e na data do arquivo, não no conteúdo) que ele transfere será consistente; no entanto, isso não garante que um conjunto de arquivos seja consistente. Por exemplo, se o BITS estiver no meio do download do segundo de dois arquivos no trabalho no momento em que os arquivos são atualizados no servidor, o BITS reiniciará o download do segundo arquivo; no entanto, o primeiro arquivo não é baixado novamente.

Por padrão, um usuário pode adicionar até 500 intervalos para um arquivo. Esse limite não se aplica a administradores ou contas de serviço. Para alterar o padrão, defina a política de grupo MaxRangesPerFile .

Antes do Windows Vista: Não há limite para o número de arquivos que um usuário pode adicionar a um trabalho.

Para melhorar o desempenho em transferências de arquivos habilitadas para Windows BranchCache, é recomendável definir o comprimento do intervalo como pelo menos 400 bytes.

Exemplos

O exemplo a seguir mostra como chamar o método AddFileWithRanges para especificar os intervalos de um arquivo a ser baixado. O exemplo pressupõe que a variável IBackgroundCopyJob , pJob, seja válida.

    IBackgroundCopyJob *pJob;
    IBackgroundCopyJob3 *pJob3 = NULL;
    DWORD dwRangeCount = 3;                  //Number of elements in Ranges.
    BG_FILE_RANGE Ranges[] = {24, 17,        //Array of ranges to download (offset and length).
                              111, BG_LENGTH_TO_EOF,
                              83, 7
                             };

    //Need to query the IBackgroundCopyJob interface for an IBackgroundCopyJob3
    //interface pointer. The IBackgroundCopyJob3 interface contains the AddFileWithRanges method.
    hr = pJob->QueryInterface(__uuidof( IBackgroundCopyJob3 ), (void**)&pJob3;);
    if (S_OK == hr)
    {
         pJob->Release(); //No longer need the IBackgoundCopyJob interface pointer.

         //Add a file to the job and specify the ranges from the file to download.
         hr = pJob3->AddFileWithRanges(L"<REMOTENAMEGOESHERE>", L"<LOCALNAMEGOESHERE>",
                                       dwRangeCount, Ranges);
         if (FAILED(hr))
         {
              //Handle error.
              //Returns E_NOTIMPL if not a download job.
              //Returns E_INVALIDARG if dwRangeCount is zero or the remote or local name is invalid.
              //Returns BG_E_INVALID_RANGE if one of the ranges is invalid.
              //Returns BG_E_OVERLAPPING_RANGES if you specify overlapping or duplicate ranges.
         }

          pJob3->Release(); //Release the interface if you are done with it.
     }
    else
    {
         //Handle error. QueryInterface will return E_NOINTERFACE if the version of BITS
         //running on the computer is less than BITS 2.0.
    }

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows Vista, Windows XP com SP2,KB842773 no Windows Server 2003 e Windows XP
Servidor mínimo com suporte Windows Server 2008, Windows Server 2003 com SP1
Plataforma de Destino Windows
Cabeçalho bits2_0.h (inclua Bits.h)
Biblioteca Bits.lib
DLL BitsPrx3.dll

Confira também

BG_FILE_RANGE

IBackgroundCopyFile2::GetFileRanges

IBackgroundCopyJob3

IBackgroundCopyJob::AddFile