次の方法で共有


IBackgroundCopyJob::AddFileSet メソッド (bits.h)

ジョブに複数のファイルを追加します。

構文

HRESULT AddFileSet(
  [in] ULONG        cFileCount,
  [in] BG_FILE_INFO *pFileSet
);

パラメーター

[in] cFileCount

paFileSet 内の要素の数。

[in] pFileSet

転送するファイルのローカル ファイル名とリモート ファイル名を識別する BG_FILE_INFO 構造体の配列。

アップロード ジョブは 1 つのファイルに制限されます。 配列に複数の要素が含まれている場合、またはジョブに既にファイルが含まれている場合、メソッドはBG_E_TOO_MANY_FILESを返します。

戻り値

このメソッドは、次の HRESULT 値と他の値を返します。

リターン コード Description
S_OK
ジョブにファイルが正常に追加されました。
BG_E_TOO_MANY_FILES
アップロード ジョブに含めることができるファイルは 1 つだけです。ジョブに複数のファイルを追加することはできません。 配列内のどのファイルもジョブに追加されませんでした。
BG_E_TOO_MANY_FILES_IN_JOB
MaxFilesPerJob グループ ポリシー設定は、ジョブに含めることができるファイルの数を決定します。 ジョブへのファイルの追加が MaxFilesPerJob の制限を超えています。
E_INVALIDARG
このエラーは、次のいずれかの理由で発生する可能性があります。
  • ローカルまたはリモートのファイル名が無効です。
  • リモート ファイル名では、サポートされていないプロトコルが使用されます。
  • ローカル ファイル名は、相対パスを使用して指定されました。
E_ACCESSDENIED
ユーザーには、クライアント上の指定されたディレクトリに書き込むアクセス許可がありません。

注釈

複数のファイルを 1 つのジョブに追加する場合は、ループで IBackgroundCopyJob::AddFile メソッドを呼び出すよりも、AddFileSet メソッドを呼び出す方が効率的です。 ジョブに 1 つのファイルを追加するには、 AddFile メソッドを呼び出します。 詳細については、「 ジョブへのファイルの追加」を参照してください。

BITS がファイルからデータ範囲をダウンロードするジョブにファイルを追加するには、 IBackgroundCopyJob3::AddFileWithRanges メソッドを呼び出します。

アップロード ジョブに含めることができるファイルは 1 つだけです。 複数のファイルを追加すると、メソッドはBG_E_TOO_MANY_FILESを返します。

ダウンロードの場合、BITS は転送するファイルのバージョン (コンテンツではなく、ファイル のサイズと日付に基づく) が一貫していることを保証します。ただし、一連のファイルに一貫性があることを保証するものではありません。 たとえば、BITS がサーバー上でファイルが更新された時点で 2 つ目のファイルの 2 番目のファイルをダウンロードする途中にある場合、BITS は 2 番目のファイルのダウンロードを再開します。ただし、最初のファイルは再びダウンロードされません。

サーバーからダウンロードするファイルを所有している場合は、新しいバージョンのファイルごとに新しい URL を作成する必要があることに注意してください。 新しいバージョンのファイルに同じ URL を使用する場合、一部のプロキシ サーバーは、ファイルが古い場合は元のサーバーで検証されないため、キャッシュから古いデータを提供する可能性があります。

アップロードの場合、ファイルの転送中にローカル ファイルが変更されると、BITS によってエラーが生成されます。 エラー コードがBG_E_FILE_CHANGEDされ、コンテキストがBG_ERROR_CONTEXT_LOCAL_FILE。

BITS は、ジョブ内のファイルを順番に転送します。 ファイルの転送中にエラーが発生した場合、ジョブはエラー状態に移行し、エラーが解決されるまでジョブ内のそれ以上のファイルは処理されません。

既定では、ユーザーはジョブに最大 200 個のファイルを追加できます。 この制限は、管理者またはサービス アカウントには適用されません。 既定値を変更するには、 MaxFilesPerJob グループ ポリシーを設定します。

Windows Vista より前のバージョン: ユーザーがジョブに追加できるファイルの数に制限はありません。

スケーラビリティの問題については、BITS を 使用する場合のベスト プラクティスに関する説明を参照してください。

例示

次の例は、ダウンロード ジョブに複数のファイルを追加する方法を示しています。 この例では、 IBackgroundCopyJob インターフェイス ポインターが有効であると想定しています。

HRESULT hr;
IBackgroundCopyJob* pJob;
BG_FILE_INFO* paFiles = NULL;
int idx = 0;
int nCount = 0;  //Number of files to add to the job.
LPWSTR pszLocalName = NULL;
LPWSTR pszRemoteName = NULL;

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

Requirements

Requirement 価値
サポートされる最小クライアント Windows XP
サポートされている最小のサーバー Windows Server 2003
ターゲット プラットフォーム ウィンドウズ
Header bits.h
Library Bits.lib
DLL QmgrPrxy.dll

こちらも参照ください

IBackgroundCopyJob3::AddFileWithRanges

IBackgroundCopyJob::AddFile

IBackgroundCopyJob::EnumFiles

IBackgroundCopyJob::GetState

IBackgroundCopyJob::Resume