Поделиться через


Метод 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 , а также другие.

Код возврата Описание
S_OK
Файлы были успешно добавлены в задание.
BG_E_TOO_MANY_FILES
Задания отправки могут содержать только один файл; Вы не можете добавить в задание несколько файлов. Ни один из файлов в массиве не был добавлен в задание.
BG_E_TOO_MANY_FILES_IN_JOB
Параметр групповая политика MaxFilesPerJob определяет, сколько файлов может содержать задание. Добавление файла в задание превышает ограничение MaxFilesPerJob.
E_INVALIDARG
Эта ошибка может возникнуть по одной из следующих причин:
  • Недопустимое имя локального или удаленного файла.
  • Имя удаленного файла использует неподдерживаемый протокол.
  • Имя локального файла было указано с помощью относительного пути.
E_ACCESSDENIED
Пользователь не имеет разрешения на запись в указанный каталог на клиенте.

Комментарии

При добавлении нескольких файлов в задание эффективнее вызывать метод 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

См. также раздел

IBackgroundCopyJob3::AddFileWithRanges

IBackgroundCopyJob::AddFile

IBackgroundCopyJob::EnumFiles

IBackgroundCopyJob::GetState

IBackgroundCopyJob::Resume