Dela via


Lägga till filer i ett jobb

Ett jobb innehåller en eller flera filer som du vill överföra. Använd någon av följande metoder för att lägga till filer i ett jobb:

IBackgroundCopyJob::AddFile

Lägger till en enda fil i ett jobb.

IBackgroundCopyJob::AddFileSet

Lägger till en eller flera filer i ett jobb. Om du lägger till flera filer är det mer effektivt att anropa den här metoden än att anropa metoden AddFile i en loop.

IBackgroundCopyJob3::AddFileWithRanges

Lägger till en enda fil i ett jobb. Använd den här metoden om du vill ladda ned dataområden från en fil. Du kan bara använda den här metoden för att ladda ned jobb.

När du lägger till en fil i ett jobb anger du fjärrnamnet och det lokala namnet på filen. Mer information om formatet för lokala filnamn och fjärrfilnamn finns i BG_FILE_INFO struktur.

Ett uppladdningsjobb kan bara innehålla en fil. Metoderna IBackgroundCopyJob::AddFile och IBackgroundCopyJob::AddFileSet returnerar BG_E_TOO_MANY_FILES om du försöker lägga till fler än en fil i ett uppladdningsjobb. Om du behöver ladda upp fler än en fil kan du överväga att använda en CAB- eller ZIP-fil.

För nedladdningsjobb begränsar BITS antalet filer som en användare kan lägga till i ett jobb till 200 filer och antalet intervall för en fil till 500 intervall. Dessa gränser gäller inte för administratörer eller tjänster. Om du vill ändra dessa standardgränser kan du läsa grupprinciper.

Ägaren av jobbet eller en användare med administratörsbehörighet kan lägga till filer i jobbet när som helst innan den anropar IBackgroundCopyJob::Complete-metoden eller metoden IBackgroundCopyJob::Cancel-metoden.

Om du behöver ändra fjärrnamnet på filen när du har lagt till filen i jobbet kan du anropa metoden IBackgroundCopyJob3::ReplaceRemotePrefix eller metoden IBackgroundCopyFile2::SetRemoteName. Använd metoden ReplaceRemotePrefix för att ändra serverdelen av fjärrnamnet när servern inte är tillgänglig eller så att roaminganvändare kan ansluta till närmaste server. Använd metoden SetRemoteName för att ändra det protokoll som används för att överföra filen eller för att ändra filnamnet eller sökvägen.

BITS skapar en tillfällig fil i målkatalogen och använder den tillfälliga filen för filöverföringen. Om du vill hämta det tillfälliga filnamnet anropar du metoden IBackgroundCopyFile3::GetTemporaryName. BITS ändrar det tillfälliga filnamnet till målfilens namn när du anropar metoden Complete. BITS anger inte någon säkerhetsbeskrivning när den skapar den tillfälliga filen (filen ärver ACL-informationen från målkatalogen). Om de överförda data är känsliga bör programmet ange en lämplig ACL i målkatalogen för att förhindra obehörig åtkomst.

Om du vill behålla ägar- och ACL-informationen med den överförda filen anropar du IBackgroundCopyJob3::SetFileACLFlags-metoden.

Ägaren av jobbet (användaren som skapade jobbet eller administratören som tog över ägarskapet för jobbet) måste ha behörighet till filen på servern samt klienten. Om du till exempel vill ladda ned en fil måste användaren ha läsbehörighet på servern och skriva behörigheter till den lokala katalogen på klienten.

I följande exempel visas hur du lägger till en enskild fil i jobbet. Exemplet förutsätter att IBackgroundCopyJob gränssnittspekare, pJob, är giltig.

HRESULT hr;
IBackgroundCopyJob* pJob;

//Replace parameters with variables that contain valid paths.
hr = pJob->AddFile(L"https://ServerName/Path/File.Ext", L"d:\\Path\\File.Ext");
if (SUCCEEDED(hr))
{
  //Do something.
}

I följande exempel visas hur du lägger till flera filer i jobbet. Exemplet förutsätter att gränssnittspekaren IBackgroundCopyJob, pJob, är giltig och att lokala och fjärrnamn kommer från en lista i användargränssnittet.

HRESULT hr;
IBackgroundCopyJob* pJob;
BG_FILE_INFO* paFiles = NULL;
ULONG idx = 0;
ULONG nCount = 0;            //Set to the number of files to add to the job.
LPWSTR pszLocalName = NULL;  //Comes from the list in the user interface.
LPWSTR pszRemoteName = NULL; //Comes from the list in the user interface.

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