Compartilhar via


Enviando o arquivo para o dispositivo

Depois que o arquivo tiver sido transcodificado, se necessário, e todos os metadados incluindo o formato tiverem sido definidos, seu aplicativo poderá enviar o arquivo para o dispositivo. Para fazer isso, primeiro você deve obter uma interface IWMDMStorageControl (ou uma versão posterior) para um local de destino no dispositivo. Os sinalizadores Inserir especificam se o novo armazenamento deve ser um irmão ou filho do destino. Depois de obter o destino, você pode chamar IWMDMStorageControl::Insert, IWMDMStorageControl2::Insert2 ou IWMDMStorageControl3::Insert3 para transferir o arquivo. O aplicativo pode lidar com a leitura dos próprios dados do arquivo implementando IWMDMOperation ou pode permitir que o método Insert leia e transfira o arquivo automaticamente, não fornecendo um ponteiro para uma IWMDMOperation implementada pelo aplicativo.

O código C++ a seguir demonstra como chamar Insert3 para gravar um arquivo em um dispositivo. Se o ponteiro pOperation passado para Insert3 for NULL, o arquivo será enviado em uma etapa; se esse ponteiro for um ponteiro de interface válido, o Windows Media Gerenciador de Dispositivos chamará seu método de retorno de chamada para obter dados em blocos. Para obter detalhes sobre como implementar IWMDMOperation, consulte Manipulando transferências de arquivos manualmente.

// Set the flags for the operation
UINT flags = WMDM_MODE_BLOCK | // Synchronous call. 
    WMDM_STORAGECONTROL_INSERTINTO | // Insert it into the destination folder.
    WMDM_CONTENT_FILE | // We're inserting a file.
    WMDM_FILE_CREATE_OVERWRITE; // Overwrite existing files.
if (pOperation != NULL)
    flags |= WMDM_CONTENT_OPERATIONINTERFACE;

// Send the file and metadata.
hr = pStgCtl3->Insert3(
    flags,
    WMDM_FILE_ATTR_FOLDER, // The current storage is a folder.
    const_cast<WCHAR*>(pwszFileName), // Source file.
    L"My New File.wma",//NULL, // Destination file name.
    pOperation, // NULL to allow the SDK to read the file; 
                // non-NULL to present raw data bytes to the SDK.
    pProgress, // Interface to send simple progress notifications.
    pMetadata, // IWMDMMetaData interface previously created and filled.
    NULL, 
    &pNewStorage); // Out: handle to the new storage, if the method succeeds.

Gravando arquivos no dispositivo