IBackgroundCopyFile 接口是与 Windows Background Intelligent Transfer Service (BITS) 相关的 Win32 API 接口之一,用于操作 BITS 作业中的文件。以下是关于 IBackgroundCopyFile 接口的一些基本信息:
interface IBackgroundCopyFile : public IUnknown
{
public:
    virtual HRESULT STDMETHODCALLTYPE GetRemoteName(
        /* [out] */ LPWSTR* pVal) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetLocalName(
        /* [out] */ LPWSTR* pVal) = 0;

    virtual HRESULT STDMETHODCALLTYPE GetProgress(
        /* [out] */ BG_FILE_PROGRESS* pVal) = 0;
};

这个接口继承自 IUnknown 接口,它定义了三个纯虚函数:

1. GetRemoteName: 获取文件的远程名称(下载源的路径或上传目标的路径)。

2. GetLocalName: 获取文件的本地名称(本地存储路径)。

3. GetProgress: 获取文件传输的进度信息。BG_FILE_PROGRESS 结构体包含有关文件传输进度的信息,如已传输字节数、总字节数等。

要使用这个接口,你可以在 IBackgroundCopyCallback 接口的 JobTransferred 方法中获取 IBackgroundCopyFile 实例,并通过调用相关的方法来检索文件信息和传输进度。例如:
HRESULT STDMETHODCALLTYPE JobTransferred(
    IBackgroundCopyJob* pJob)
{
    IEnumBackgroundCopyFiles* pEnumFiles;
    pJob->EnumFiles(&pEnumFiles);

    IBackgroundCopyFile* pFile;
    ULONG count;
    pEnumFiles->Next(1, &pFile, &count);

    if (count > 0)
    {
        LPWSTR pRemoteName, pLocalName;
        BG_FILE_PROGRESS fileProgress;

        // 获取远程名称
        pFile->GetRemoteName(&pRemoteName);

        // 获取本地名称
        pFile->GetLocalName(&pLocalName);

        // 获取传输进度
        pFile->GetProgress(&fileProgress);

        // 处理文件信息和传输进度
        // ...

        // 释放资源
        CoTaskMemFree(pRemoteName);
        CoTaskMemFree(pLocalName);
        pFile->Release();
    }

    pEnumFiles->Release();

    return S_OK;
}

这样,你就可以在 JobTransferred 方法中使用 IBackgroundCopyFile 接口来获取文件的信息和传输进度。


转载请注明出处:http://www.zyzy.cn/article/detail/24041/Win32 API/Bits.h/IBackgroundCopyFile