Метод IBackgroundCopyJob::AddFileSet (bits.h)
Добавляет несколько файлов в задание.
Синтаксис
HRESULT AddFileSet(
[in] ULONG cFileCount,
[in] BG_FILE_INFO *pFileSet
);
Параметры
[in] cFileCount
Количество элементов в paFileSet.
[in] pFileSet
Массив BG_FILE_INFO структур, определяющих локальные и удаленные имена файлов для передачи.
Задания отправки ограничены одним файлом. Если массив содержит несколько элементов или задание уже содержит файл, метод возвращает BG_E_TOO_MANY_FILES.
Возвращаемое значение
Этот метод возвращает следующие значения HRESULT , а также другие.
Код возврата | Описание |
---|---|
|
Файлы были успешно добавлены в задание. |
|
Задания отправки могут содержать только один файл; Вы не можете добавить в задание несколько файлов. Ни один из файлов в массиве не был добавлен в задание. |
|
Параметр групповая политика MaxFilesPerJob определяет, сколько файлов может содержать задание. Добавление файла в задание превышает ограничение MaxFilesPerJob. |
|
Эта ошибка может возникнуть по одной из следующих причин:
|
|
Пользователь не имеет разрешения на запись в указанный каталог на клиенте. |
Комментарии
При добавлении нескольких файлов в задание эффективнее вызывать метод AddFileSet , чем метод IBackgroundCopyJob::AddFile в цикле. Чтобы добавить один файл в задание, вызовите метод AddFile . Дополнительные сведения см. в разделе Добавление файлов в задание.
Чтобы добавить файл в задание, из которого BITS скачивает диапазоны данных из файла, вызовите метод IBackgroundCopyJob3::AddFileWithRanges .
Задания отправки могут содержать только один файл. При добавлении нескольких файлов метод возвращает BG_E_TOO_MANY_FILES.
Для скачивания BITS гарантирует, что версия файла (в зависимости от размера и даты, а не содержимого), которую он передает, будет согласованной; однако это не гарантирует, что набор файлов будет согласованным. Например, если BITS находится в середине загрузки второго из двух файлов во время обновления файлов на сервере, BITS перезапускает скачивание второго файла; однако первый файл больше не скачан.
Обратите внимание, что если вы являетесь владельцем файла, скачиваемого с сервера, следует создать новый URL-адрес для каждой новой версии файла. Если вы используете тот же URL-адрес для новых версий файла, некоторые прокси-серверы могут обслуживать устаревшие данные из своего кэша, так как они не проверяются на исходном сервере, является ли файл устаревшим.
При отправке BITS создает ошибку, если локальный файл изменяется во время передачи файла. Код ошибки BG_E_FILE_CHANGED, а контекст — BG_ERROR_CONTEXT_LOCAL_FILE.
BITS передает файлы в рамках задания последовательно. Если при передаче файла возникает ошибка, задание переходит в состояние ошибки, и никакие файлы в задании не обрабатываются до тех пор, пока ошибка не будет устранена.
По умолчанию пользователь может добавить в задание до 200 файлов. Это ограничение не применяется к администраторам или учетным записям служб. Чтобы изменить значение по умолчанию, задайте групповые политики MaxFilesPerJob .
До Windows Vista: Количество файлов, которые пользователь может добавить в задание, не ограничено.
Сведения о масштабируемости см. в статье Рекомендации по использованию BITS.
Примеры
В следующем примере показано, как добавить несколько файлов в задание загрузки. В примере предполагается, что указатель интерфейса IBackgroundCopyJob является допустимым.
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);
}
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows XP |
Минимальная версия сервера | Windows Server 2003 |
Целевая платформа | Windows |
Header | bits.h |
Библиотека | Bits.lib |
DLL | QmgrPrxy.dll |