Метод IBackgroundCopyFile2::SetRemoteName (bits2_0.h)
Изменяет удаленное имя на новый URL-адрес в задании загрузки.
Синтаксис
HRESULT SetRemoteName(
[in] LPCWSTR Val
);
Параметры
[in] Val
Строка, завершающаяся значением NULL, содержащая имя файла на сервере. Сведения об указании удаленного имени см. в разделе Элемент RemoteName и примечания структуры BG_FILE_INFO .
Возвращаемое значение
Этот метод возвращает следующие возвращаемые значения, а также другие.
Код возврата | Описание |
---|---|
|
Успешное завершение |
|
Новое удаленное имя является недопустимым URL-адресом или слишком длинным (длина URL-адреса не может превышать 2200 символов). |
|
Этот метод нельзя вызывать для заданий отправки или отправки и ответа; Вызовите этот метод только для заданий скачивания. |
|
Состояние задания не может быть BG_JOB_STATE_CANCELLED или BG_JOB_STATE_ACKNOWLEDGED. |
Комментарии
Как правило, этот метод вызывается, если требуется изменить протокол, используемый для передачи файла (например, из SMB в HTTP), или если требуется изменить имя или путь к файлу.
Этот метод не сериализуется при возврате. Чтобы сериализовать изменение, приостановите задание, вызовите этот метод (при изменении нескольких файлов в задании и используйте цикл) и возобновите задание. Вызов метода IBackgroundCopyJob::Resume сериализует изменение.
Если метка времени или размер файла нового удаленного имени отличается от предыдущего удаленного имени или новый сервер не поддерживает возобновление контрольных точек (для удаленных имен HTTP), BITS перезапускает скачивание. В противном случае передача возобновляется из той же позиции на новом сервере. BITS не перезапускает уже переданные файлы.
Если удаленное имя определяет путь к блоку сообщений сервера (SMB), в следующей таблице указаны возможные коды ошибок, которые могут возникнуть после возобновления задания. Эти ошибки помещает задание в состояние BG_JOB_STATE_ERROR .
Код ошибки | Описание |
---|---|
HRESULT_FROM_WIN32(ERROR_PATH_NOT_FOUND) |
Каталог не найден. |
HRESULT_FROM_WIN32(ERROR_FILE_NOT_FOUND) |
Файл не найден. |
HRESULT_FROM_WIN32(ERROR_ACCESS_DENIED) |
Пользователь не имеет доступа к файлу, указанному в Val. |
Примеры
В следующем примере показано, как вызвать метод SetRemoteName для изменения удаленного имени файла. В примере предполагается, что переменная IBackgroundCopyJob pJob является допустимой и задание содержит один или несколько файлов.
IBackgroundCopyJob *pJob;
IEnumBackgroundCopyFiles* pFiles = NULL;
IBackgroundCopyFile* pFile = NULL;
IBackgroundCopyFile2* pFile2 = NULL;
WCHAR* pRemoteFileName = NULL;
ULONG cFileCount = 0;
hr = pJob->Suspend();
hr = pJob->EnumFiles(&pFiles);
if (SUCCEEDED(hr))
{
//Get the count of files in the job.
hr = pFiles->GetCount(&cFileCount);
//Enumerate the files in the job.
for (ULONG idx=0; idx<cFileCount; idx++)
{
hr = pFiles->Next(1, &pFile, NULL);
if (S_OK == hr)
{
//Get the local name of the file.
hr = pFile->GetRemoteName(&pRemoteFileName);
if (SUCCEEDED(hr))
{
//Determine if you want to replace the remote name of this file.
if (<CONDITIONGOESHERE>)
{
//Need to query the IBackgroundCopyFile interface for an IBackgroundCopyFile2
//interface pointer. The IBackgroundCopyFile2 interface contains the SetRemoteName method.
hr = pFile->QueryInterface(__uuidof(IBackgroundCopyFile2), (void**)&pFile2);
if (S_OK == hr)
{
hr = pFile2->SetRemoteName(L"<NEWURLGOESHERE>");
if (FAILED(hr))
{
//Handle error.
//Returns E_NOTIMPL if not a download job.
//Returns E_INVALIDARG if invalid URL.
}
}
else
{
//handle error. QueryInterface will return E_NOINTERFACE if the version of BITS
//running on the computer is less than BITS 2.0.
}
}
CoTaskMemFree(pRemoteFileName);
}
pFile->Release();
pFile = NULL;
}
else
{
//Handle error
break;
}
}
pFiles->Release();
pFiles = NULL;
}
hr = pJob->Resume(); //Force the job to serialize.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows Vista, Windows XP с пакетом обновления 2 (SP2), KB842773 в Windows Server 2003 и Windows XP |
Минимальная версия сервера | Windows Server 2008, Windows Server 2003 с пакетом обновления 1 (SP1) |
Целевая платформа | Windows |
Header | bits2_0.h (включая Bits.h) |
Библиотека | Bits.lib |
DLL | BitsPrx3.dll |