작업에 파일 추가

작업에는 전송 하려는 파일이 하나 이상 포함 되어 있습니다. 다음 방법 중 하나를 사용 하 여 작업에 파일을 추가 합니다.

IBackgroundCopyJob:: AddFile

단일 파일을 작업에 추가 합니다.

IBackgroundCopyJob:: AddFileSet

작업에 하나 이상의 파일을 추가 합니다. 여러 파일을 추가 하는 경우 루프에서 AddFile 메서드를 호출 하는 것 보다이 메서드를 호출 하는 것이 더 효율적입니다.

IBackgroundCopyJob3:: AddFileWithRanges

단일 파일을 작업에 추가 합니다. 파일에서 데이터 범위를 다운로드 하려는 경우이 방법을 사용 합니다. 다운로드 작업에만이 방법을 사용할 수 있습니다.

작업에 파일을 추가할 때 파일의 원격 이름과 로컬 이름을 지정 합니다. 로컬 및 원격 파일 이름의 형식에 대 한 자세한 내용은 BG _ 파일 _ 정보 구조를 참조 하세요.

업로드 작업은 하나의 파일만 포함할 수 있습니다. 업로드 작업에 파일을 두 개 이상 추가 하려고 하면 IBackgroundCopyJob:: AddFileIBackgroundCopyJob:: addfileset 메서드에서 BG _ E _ 너무 _ 많은 파일을 반환 합니다 _ . 둘 이상의 파일을 업로드 해야 하는 경우 CAB 또는 ZIP 파일을 사용 하는 것이 좋습니다.

다운로드 작업의 경우 BITS는 사용자가 작업에 추가할 수 있는 파일 수를 200 파일에 제한 하 고 파일의 범위 수를 500 범위로 제한 합니다. 이러한 제한은 관리자 또는 서비스에는 적용 되지 않습니다. 이러한 기본 제한을 변경 하려면 그룹 정책을 참조 하세요.

작업 소유자 또는 관리자 권한이 있는 사용자는 IBackgroundCopyJob:: Complete 메서드 또는 IBackgroundCopyJob:: Cancel 메서드를 호출 하기 전에 언제 든 지 작업에 파일을 추가할 수 있습니다.

작업에 파일을 추가한 후 파일의 원격 이름을 변경 해야 하는 경우 IBackgroundCopyJob3:: ReplaceRemotePrefix 메서드 또는 IBackgroundCopyFile2:: SetRemoteName 메서드를 호출할 수 있습니다. 서버를 사용할 수 없는 경우 또는 로밍 사용자가 가장 가까운 서버에 연결할 수 있도록 ReplaceRemotePrefix 메서드를 사용 하 여 원격 이름의 서버 부분을 변경 합니다. SetRemoteName 메서드를 사용 하 여 파일을 전송 하거나 파일 이름 또는 경로를 변경 하는 데 사용 되는 프로토콜을 변경할 수 있습니다.

BITS는 대상 디렉터리에 임시 파일을 만들고 파일 전송에 임시 파일을 사용 합니다. 임시 파일 이름을 가져오려면 IBackgroundCopyFile3:: GetTemporaryName 메서드를 호출 합니다. BITS는 전체 메서드를 호출할 때 임시 파일 이름을 대상 파일 이름으로 변경 합니다. BITS는 임시 파일을 만들 때 보안 설명자를 지정 하지 않습니다. 파일은 대상 디렉터리에서 ACL 정보를 상속 합니다. 전송 된 데이터가 중요 한 경우 응용 프로그램은 무단 액세스를 방지 하기 위해 대상 디렉터리에 적절 한 ACL을 지정 해야 합니다.

전송 된 파일을 사용 하 여 소유자 및 ACL 정보를 유지 하려면 IBackgroundCopyJob3:: SetFileACLFlags 메서드를 호출 합니다.

작업 소유자 (작업을 만든 사용자 또는 작업의 소유권 을 받은 관리자)에는 클라이언트와 서버의 파일에 대 한 사용 권한이 있어야 합니다. 예를 들어 파일을 다운로드 하려면 사용자에 게 서버에 대 한 읽기 권한과 클라이언트의 로컬 디렉터리에 대 한 쓰기 권한이 있어야 합니다.

다음 예제에서는 단일 파일을 작업에 추가 하는 방법을 보여 줍니다. 이 예제에서는 IBackgroundCopyJob 인터페이스 포인터 pjob이 유효 하다 고 가정 합니다.

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

다음 예제에서는 여러 파일을 작업에 추가 하는 방법을 보여 줍니다. 이 예제에서는 IBackgroundCopyJob 인터페이스 포인터 pjob이 유효 하 고 로컬 및 원격 이름이 사용자 인터페이스의 목록에서 제공 되는 것으로 가정 합니다.

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