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 |
---|---|
|
Os arquivos foram adicionados com êxito ao trabalho. |
|
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. |
|
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. |
|
Você pode receber esse erro por um dos seguintes motivos:
|
|
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 |