Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Um trabalho contém um ou mais arquivos que você deseja transferir. Use um dos seguintes métodos para adicionar arquivos a um trabalho:
-
Adiciona um único arquivo a um trabalho.
-
Adiciona um ou mais arquivos a um trabalho. Se você estiver adicionando vários arquivos, é mais eficiente chamar esse método do que chamar o AddFile método em um loop.
-
Adiciona um único arquivo a um trabalho. Use esse método se quiser baixar intervalos de dados de um arquivo. Você pode usar esse método apenas para trabalhos de download.
Ao adicionar um arquivo a um trabalho, você especifica o nome remoto e o nome local do arquivo. Para obter detalhes sobre o formato dos nomes de arquivo locais e remotos, consulte a estrutura BG_FILE_INFO.
Um trabalho de carregamento pode conter apenas um arquivo. Os métodos IBackgroundCopyJob::AddFile e IBackgroundCopyJob::AddFileSet retornam BG_E_TOO_MANY_FILES se você tentar adicionar mais de um arquivo a um trabalho de carregamento. Se precisar de carregar mais do que um ficheiro, considere utilizar um ficheiro CAB ou ZIP.
Para trabalhos de download, o BITS limita o número de arquivos que um usuário pode adicionar a um trabalho a 200 arquivos e o número de intervalos de um arquivo a 500 intervalos. Estes limites não se aplicam a administradores ou serviços. Para alterar esses limites padrão, consulte Diretivas de Grupo.
O proprietário do trabalho ou um usuário com privilégios de administrador pode adicionar arquivos ao trabalho a qualquer momento antes de chamar o método IBackgroundCopyJob::Complete ou o método IBackgroundCopyJob::Cancel.
Se precisar alterar o nome remoto do arquivo depois de adicioná-lo ao trabalho, você pode chamar o método IBackgroundCopyJob3::ReplaceRemotePrefix ou o métodoIBackgroundCopyFile2::SetRemoteName. Use o método ReplaceRemotePrefix para alterar a parte do servidor do nome remoto quando o servidor não estiver disponível ou para permitir que usuários móveis se conectem ao servidor mais próximo. Use o método SetRemoteName para alterar o protocolo usado para transferir o arquivo ou para alterar o nome do arquivo ou caminho.
O BITS cria um arquivo temporário no diretório de destino e usa o arquivo temporário para a transferência de arquivos. Para obter o nome do arquivo temporário, chame o métodoIBackgroundCopyFile3::GetTemporaryName. O BITS altera o nome do arquivo temporário para o nome do arquivo de destino quando você chama o método Complete. O BITS não especifica um descritor de segurança quando cria arquivo temporário (o arquivo herda as informações da ACL do diretório de destino). Se os dados transferidos forem confidenciais, o aplicativo deve especificar uma ACL apropriada no diretório de destino para impedir o acesso não autorizado.
Para manter as informações do proprietário e da ACL com o arquivo transferido, chame o o método IBackgroundCopyJob3::SetFileACLFlags.
O proprietário do trabalho (o usuário que criou o trabalho ou o administrador que assumiu a propriedade do trabalho) deve ter permissões para o arquivo no servidor, bem como para o cliente. Por exemplo, para baixar um arquivo, o usuário deve ter permissões de leitura no servidor e permissões de gravação no diretório local no cliente.
O exemplo a seguir mostra como adicionar um único arquivo ao trabalho. O exemplo pressupõe que o ponteiro de interface IBackgroundCopyJob, pJob, é válido.
HRESULT hr;
IBackgroundCopyJob* pJob;
//Replace parameters with variables that contain valid paths.
hr = pJob->AddFile(L"https://ServerName/Path/File.Ext", L"d:\\Path\\File.Ext");
if (SUCCEEDED(hr))
{
//Do something.
}
O exemplo a seguir mostra como adicionar vários arquivos ao trabalho. O exemplo pressupõe que o ponteiro de interface IBackgroundCopyJob, pJob, é válido e os nomes locais e remotos vêm de uma lista na interface do usuário.
HRESULT hr;
IBackgroundCopyJob* pJob;
BG_FILE_INFO* paFiles = NULL;
ULONG idx = 0;
ULONG nCount = 0; //Set to the number of files to add to the job.
LPWSTR pszLocalName = NULL; //Comes from the list in the user interface.
LPWSTR pszRemoteName = NULL; //Comes from the list in the user interface.
//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);
}