ジョブ内のファイルの列挙
ジョブ内のファイルを列挙するには、IBackgroundCopyJob::EnumFiles メソッドを呼び出します。 このメソッドは、ファイルの列挙に使用する IEnumBackgroundCopyFiles インターフェイス ポインターを返します。
列挙リストは、EnumFiles メソッドを呼び出した時点でのジョブ内のファイルのスナップショットであることに注意してください。 ただし、これらのファイル オブジェクトのプロパティ値には、ファイルの現在の値が反映されます。
次の例は、ジョブ内のファイルを列挙し、そのプロパティを取得する方法を示しています。 この例では、IBackgroundCopyJob インターフェイス ポインターが有効であると想定しています。
HRESULT hr = 0;
IBackgroundCopyJob* pJob;
IEnumBackgroundCopyFiles* pFiles = NULL;
IBackgroundCopyFile* pFile = NULL;
IBackgroundCopyFile3* pFile3 = NULL;
WCHAR* pLocalFileName = NULL;
ULONG cFileCount = 0;
ULONG idx = 0;
hr = pJob->EnumFiles(&pFiles);
if (SUCCEEDED(hr))
{
//Get the count of files in the job.
pFiles->GetCount(&cFileCount);
//Enumerate the files in the job.
for (idx=0; idx<cFileCount; idx++)
{
hr = pFiles->Next(1, &pFile, NULL);
if (S_OK == hr)
{
// Query for the latest file interface.
hr = pFile->QueryInterface(__uuidof(IBackgroundCopyFile3), (void**)&pFile3);
pFile->Release();
if (FAILED(hr))
{
wprintf(L"pFile->QueryInterface failed with 0x%x.\n", hr);
goto cleanup;
}
// You can use the interface to retrieve the local and remote file
// names, get the ranges to download if only part of the file content
// is requested, determine the progress of the transfer, change the remote file
// name, get the name of the temporary file that BITS uses to download
// the file, determine if the file is downloaded from a peer, and set
// the validation state of the file so it can be shared with peers.
//Get the local name of the file.
hr = pFile3->GetLocalName(&pLocalFileName);
if (SUCCEEDED(hr))
{
//Do something with the file information.
}
CoTaskMemFree(pLocalFileName);
pFile3->Release();
pFile3 = NULL;
}
else
{
//Handle error
break;
}
}
pFiles->Release();
pFiles = NULL;
}