Método IBackgroundCopyJob::AddFileSet (bits.h)
Agrega varios archivos a un trabajo.
Sintaxis
HRESULT AddFileSet(
[in] ULONG cFileCount,
[in] BG_FILE_INFO *pFileSet
);
Parámetros
[in] cFileCount
Número de elementos de paFileSet.
[in] pFileSet
Matriz de estructuras de BG_FILE_INFO que identifican los nombres de archivo local y remoto de los archivos que se van a transferir.
Los trabajos de carga están restringidos a un único archivo. Si la matriz contiene más de un elemento o el trabajo ya contiene un archivo, el método devuelve BG_E_TOO_MANY_FILES.
Valor devuelto
Este método devuelve los siguientes valores HRESULT , así como otros.
Código devuelto | Descripción |
---|---|
|
Los archivos se agregaron correctamente al trabajo. |
|
Los trabajos de carga solo pueden contener un archivo; no puede agregar más de un archivo al trabajo. Ninguno de los archivos de la matriz se agregó al trabajo. |
|
El valor de directiva de grupo MaxFilesPerJob determina cuántos archivos puede contener un trabajo. Agregar el archivo al trabajo supera el límite de MaxFilesPerJob. |
|
Puede recibir este error por uno de los siguientes motivos:
|
|
El usuario no tiene permiso para escribir en el directorio especificado en el cliente. |
Comentarios
Es más eficaz llamar al método AddFileSet al agregar varios archivos a un trabajo que llamar al método IBackgroundCopyJob::AddFile en un bucle. Para agregar un único archivo a un trabajo, llame al método AddFile . Para obtener más información, vea Agregar archivos a un trabajo.
Para agregar un archivo a un trabajo desde el que BITS descarga intervalos de datos del archivo, llame al método IBackgroundCopyJob3::AddFileWithRanges .
Los trabajos de carga solo pueden contener un archivo. Si agrega más de un archivo, el método devuelve BG_E_TOO_MANY_FILES.
En el caso de las descargas, BITS garantiza que la versión de un archivo (basada en el tamaño y la fecha del archivo, no en el contenido) que las transferencias sean coherentes; sin embargo, no garantiza que un conjunto de archivos sea coherente. Por ejemplo, si BITS está en medio de descargar el segundo de dos archivos en el momento en que los archivos se actualizan en el servidor, BITS reinicia la descarga del segundo archivo; sin embargo, el primer archivo no se vuelve a descargar.
Tenga en cuenta que si posee el archivo que se está descargando del servidor, debe crear una nueva dirección URL para cada nueva versión del archivo. Si usa la misma dirección URL para las nuevas versiones del archivo, algunos servidores proxy pueden servir datos obsoletos de su memoria caché porque no comprueban con el servidor original si el archivo está obsoleto.
En el caso de las cargas, BITS genera un error si el archivo local cambia mientras se transfiere el archivo. El código de error se BG_E_FILE_CHANGED y el contexto se BG_ERROR_CONTEXT_LOCAL_FILE.
BITS transfiere los archivos dentro de un trabajo secuencialmente. Si se produce un error al transferir un archivo, el trabajo pasa a un estado de error y no se procesan más archivos dentro del trabajo hasta que se resuelve el error.
De forma predeterminada, un usuario puede agregar hasta 200 archivos a un trabajo. Este límite no se aplica a los administradores ni a las cuentas de servicio. Para cambiar el valor predeterminado, establezca las directivas de grupo MaxFilesPerJob .
Antes de Windows Vista: No hay ningún límite en el número de archivos que un usuario puede agregar a un trabajo.
Para conocer los problemas de escalabilidad, consulte Procedimientos recomendados al usar BITS.
Ejemplos
En el ejemplo siguiente se muestra cómo agregar varios archivos a un trabajo de descarga. En el ejemplo se supone que el puntero de interfaz IBackgroundCopyJob es 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 | Value |
---|---|
Cliente mínimo compatible | Windows XP |
Servidor mínimo compatible | Windows Server 2003 |
Plataforma de destino | Windows |
Encabezado | bits.h |
Library | Bits.lib |
Archivo DLL | QmgrPrxy.dll |