Método IBackgroundCopyJob::AddFileSet (bits.h)

Adiciona vários arquivos a um trabalho.

Sintaxe

HRESULT AddFileSet(
  [in] ULONG        cFileCount,
  [in] BG_FILE_INFO *pFileSet
);

Parâmetros

[in] cFileCount

Número de elementos em paFileSet.

[in] pFileSet

Matriz de estruturas de BG_FILE_INFO que identificam os nomes de arquivo local e remoto dos arquivos a serem transferidos.

Os trabalhos de upload são restritos a um único arquivo. Se a matriz contiver mais de um elemento ou o trabalho já contiver um arquivo, o método retornará BG_E_TOO_MANY_FILES.

Retornar valor

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

Código de retorno Descrição
S_OK
Os arquivos foram adicionados com êxito ao trabalho.
BG_E_TOO_MANY_FILES
Os trabalhos de upload só podem conter um arquivo; não é possível adicionar mais de um arquivo ao trabalho. Nenhum dos arquivos na matriz foi adicionado ao trabalho.
BG_E_TOO_MANY_FILES_IN_JOB
A configuração de Política de Grupo MaxFilesPerJob determina quantos arquivos um trabalho pode conter. Adicionar o arquivo ao trabalho excede o limite de MaxFilesPerJob.
E_INVALIDARG
Você pode receber esse erro por um dos seguintes motivos:
  • 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_ACCESSDENIED
O usuário não tem permissão para gravar no diretório especificado no cliente.

Comentários

É mais eficiente chamar o método AddFileSet ao adicionar vários arquivos a um trabalho do que chamar o método IBackgroundCopyJob::AddFile em um loop. Para adicionar um único arquivo a um trabalho, chame o método AddFile . Para obter mais informações, consulte Adicionando arquivos a um trabalho.

Para adicionar um arquivo a um trabalho do qual o BITS baixa intervalos de dados do arquivo, chame o método IBackgroundCopyJob3::AddFileWithRanges .

Os trabalhos de upload podem conter apenas um arquivo. Se você adicionar mais de um arquivo, o método retornará BG_E_TOO_MANY_FILES.

Para downloads, 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 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.

Observe que, se você tiver o arquivo que está sendo baixado do servidor, deverá criar uma NOVA URL para cada nova versão do arquivo. Se você usar a mesma URL para novas versões do arquivo, alguns servidores proxy poderão fornecer dados obsoletos do cache porque não verificam com o servidor original se o arquivo está obsoleto.

Para uploads, o BITS gerará um erro se o arquivo local for alterado enquanto o arquivo estiver sendo transferido. O código de erro é BG_E_FILE_CHANGED e o contexto é BG_ERROR_CONTEXT_LOCAL_FILE.

O BITS transfere os arquivos em um trabalho sequencialmente. Se ocorrer um erro durante a transferência de um arquivo, o trabalho passará para um estado de erro e nenhum arquivo dentro do trabalho será processado até que o erro seja resolvido.

Por padrão, um usuário pode adicionar até 200 arquivos a um trabalho. Esse limite não se aplica a administradores ou contas de serviço. Para alterar o padrão, defina as políticas de grupo MaxFilesPerJob .

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

Para saber mais sobre a escalabilidade, confira Práticas recomendadas ao usar BITS.

Exemplos

O exemplo a seguir mostra como adicionar vários arquivos a um trabalho de download. O exemplo pressupõe que o ponteiro da interface IBackgroundCopyJob seja válido.

HRESULT hr;
IBackgroundCopyJob* pJob;
BG_FILE_INFO* paFiles = NULL;
int idx = 0;
int nCount = 0;  //Number of files to add to the job.
LPWSTR pszLocalName = NULL;
LPWSTR pszRemoteName = NULL;

//Set nCount to the number of files to transfer.

//Allocate a block of memory to contain the array of BG_FILE_INFO structures.
//The BG_FILE_INFO structure contains the local and remote names of the 
//file being transferred.
paFiles = (BG_FILE_INFO*) malloc(sizeof(BG_FILE_INFO) * nCount);
if (NULL == paFiles)
{
  //Handle error
}
else
{
  //Add local and remote file name pairs to the memory block. 
  for (idx=0; idx<nCount; idx++)
  {
    //Set pszLocalName to point to an LPWSTR that contains the local name or
    //allocate memory for pszLocalName and copy the local name to pszLocalName.
    (paFiles+idx)->LocalName = pszLocalName;

    //Set pszRemoteName to point to an LPWSTR that contains the remote name or
    //allocate memory for pszRemoteName and copy the remote name to pszRemoteName.
    (paFiles+idx)->RemoteName = pszRemoteName;
  }

  //Add the files to the job.
  hr = pJob->AddFileSet(nCount, paFiles);
  if (SUCCEEDED(hr))
  {
     //Do Something.
  }

  //Free the memory block for the array of BG_FILE_INFO structures. If you allocated
  //memory for the local and remote file names, loop through the array and free the
  //memory for the file names before you free paFiles.
  free(paFiles);
}

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows XP
Servidor mínimo com suporte Windows Server 2003
Plataforma de Destino Windows
Cabeçalho bits.h
Biblioteca Bits.lib
DLL QmgrPrxy.dll

Confira também

IBackgroundCopyJob3::AddFileWithRanges

IBackgroundCopyJob::AddFile

IBackgroundCopyJob::EnumFiles

IBackgroundCopyJob::GetState

IBackgroundCopyJob::Resume