Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Zadanie zawiera co najmniej jeden plik, który chcesz przenieść. Użyj jednej z następujących metod, aby dodać pliki do zadania:
-
Dodaje pojedynczy plik do zadania.
-
Dodaje jeden lub więcej plików do zadania. Jeśli dodasz wiele plików, bardziej wydajne jest wywołanie tej metody niż wywołanie metody AddFile w pętli.
-
Dodaje pojedynczy plik do zadania. Użyj tej metody, jeśli chcesz pobrać zakresy danych z pliku. Tej metody można używać tylko w przypadku zadań pobierania.
Po dodaniu pliku do zadania należy określić nazwę zdalną i lokalną nazwę pliku. Aby uzyskać szczegółowe informacje na temat formatu nazw plików lokalnych i zdalnych, zobacz BG_FILE_INFO strukturę.
Zadanie przesyłania może zawierać tylko jeden plik. Metody IBackgroundCopyJob::AddFile i IBackgroundCopyJob::AddFileSet zwracają BG_E_TOO_MANY_FILES, jeśli spróbujesz dodać więcej niż jeden plik do zadania przesyłania. Jeśli musisz przekazać więcej niż jeden plik, rozważ użycie pliku CAB lub ZIP.
W przypadku zadań pobierania usługa BITS ogranicza liczbę plików, które użytkownik może dodać do zadania do 200 plików oraz liczbę zakresów dla pliku do 500 zakresów. Te limity nie dotyczą administratorów ani usług. Aby zmienić te domyślne limity, zobacz zasady grupowe.
Właściciel zadania lub użytkownik z uprawnieniami administratora może dodawać pliki do zadania w dowolnym momencie przed wywołaniem metody IBackgroundCopyJob::Complete lub metody IBackgroundCopyJob::Cancel.
Jeśli musisz zmienić zdalną nazwę pliku po dodaniu pliku do zadania, możesz wywołać metodę IBackgroundCopyJob3::ReplaceRemotePrefix lub metodę IBackgroundCopyFile2::SetRemoteName. Użyj metody ReplaceRemotePrefix, aby zmienić część serwera nazwy zdalnej, gdy serwer jest niedostępny lub umożliwić użytkownikom roamingu łączenie się z najbliższym serwerem. Użyj metody SetRemoteName, aby zmienić protokół używany do transferu pliku lub zmienić nazwę pliku lub ścieżkę.
Usługa BITS tworzy plik tymczasowy w katalogu docelowym i używa pliku tymczasowego do transferu plików. Aby uzyskać nazwę pliku tymczasowego, wywołaj metodę IBackgroundCopyFile3::GetTemporaryName. Usługa BITS zmienia nazwę pliku tymczasowego na nazwę pliku docelowego podczas wywoływania metody Complete. Usługa BITS nie określa deskryptora zabezpieczeń, gdy tworzy pliku tymczasowego (plik dziedziczy informacje listy ACL z katalogu docelowego). Jeśli przesyłane dane są poufne, aplikacja powinna określić odpowiednią listę ACL w katalogu docelowym, aby zapobiec nieautoryzowanemu dostępowi.
Aby zachować informacje o właścicielu i ACL z przeniesionym plikiem, wywołaj metodę IBackgroundCopyJob3::SetFileACLFlags.
Właściciel zadania (użytkownik, który utworzył zadanie lub administrator, który przejął własność zadania), musi mieć uprawnienia do pliku na serwerze, a także klienta. Na przykład aby pobrać plik, użytkownik musi mieć uprawnienia do odczytu na serwerze i uprawnienia do zapisu w katalogu lokalnym na kliencie.
W poniższym przykładzie pokazano, jak dodać pojedynczy plik do zadania. W przykładzie założono, że IBackgroundCopyJob wskaźnik interfejsu, pJob, jest prawidłowy.
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.
}
W poniższym przykładzie pokazano, jak dodać wiele plików do zadania. W przykładzie przyjęto założenie, że IBackgroundCopyJob wskaźnik interfejsu, pJob, jest prawidłowy, a nazwy lokalne i zdalne pochodzą z listy w interfejsie użytkownika.
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);
}