Megosztás a következőn keresztül:


Fájlok számbavétele feladatban

A feladatok fájljainak számbavételéhez hívja meg a IBackgroundCopyJob::EnumFiles metódust. A metódus egy IEnumBackgroundCopyFiles felületmutatót ad vissza, amelyet a fájlok számbavételéhez használ.

Vegye figyelembe, hogy az enumerált lista a feladatban lévő fájlok pillanatképe, amikor meghívja az EnumFiles metódust. A fájlobjektumok tulajdonságértékei azonban a fájl aktuális értékeit tükrözik.

Az alábbi példa bemutatja, hogyan lehet számba adni a feladat fájljait és beolvasni a tulajdonságaikat. A példa feltételezi, hogy az IBackgroundCopyJob felület mutatója érvényes.

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;
}