Deleting Content from the Device
Previous | Next |
Deleting Content from the Device
Another common operation accomplished by a WPD application is the deletion of content from a location on the device.
Content deletion operations are accomplished using the interfaces described in the following table.
Interface | Description |
IPortableDeviceContent Interface | Provides access to the content deletion methods. |
IPortableDevicePropVariantCollection Interface | Provides access to property-specific methods. |
The DeleteContentFromDevice function in the sample application's ContentTransfer.cpp module demonstrates how an application could delete content on the device. Content deletion operations are very similar to content-transfer operations. The one difference is that during a deletion, the application calls IPortableDeviceContent::Delete rather than IPortableDeviceContent::Move. (See the Moving Content on the Device topic for a description of the tasks leading up to calling the Delete method.)
HRESULT hr = S_OK; WCHAR wszSelection[81] = {0}; CComPtr<IPortableDeviceContent> pContent; CComPtr<IPortableDevicePropVariantCollection> pObjectsToDelete; CComPtr<IPortableDevicePropVariantCollection> pObjectsFailedToDelete; if (SUCCEEDED(hr)) { if (pObjectsToDelete != NULL) { PROPVARIANT pv = {0}; PropVariantInit(&pv;); // Initialize a PROPVARIANT structure with the object identifier string // that the user selected above. Notice we are allocating memory for the // LPWSTR value. This memory will be freed when PropVariantClear() is // called below. pv.vt = VT_LPWSTR; pv.pwszVal = AtlAllocTaskWideString(wszSelection); if (pv.pwszVal != NULL) { // Add the object identifier to the objects-to-delete list // (We are only deleting 1 in this example) hr = pObjectsToDelete->Add(&pv;); if (SUCCEEDED(hr)) { // Attempt to delete the object from the device hr = pContent->Delete(PORTABLE_DEVICE_DELETE_NO_RECURSION, // Deleting with no recursion pObjectsToDelete, // Object(s) to delete NULL); // Object(s) that failed to delete (we are only deleting 1, so we can pass NULL here) if (SUCCEEDED(hr)) { // An S_OK return lets the caller know that the deletion was successful if (hr == S_OK) { printf("The object '%ws' was deleted from the device.\n", wszSelection); } // An S_FALSE return lets the caller know that the deletion failed. // The caller should check the returned IPortableDevicePropVariantCollection // for a list of object identifiers that failed to be deleted. else { printf("The object '%ws' failed to be deleted from the device.\n", wszSelection); } } else { printf("! Failed to delete an object from the device, hr = 0x%lx\n",hr); } } else { printf("! Failed to delete an object from the device because we could no add the object identifier string to the IPortableDevicePropVariantCollection, hr = 0x%lx\n",hr); } } else { hr = E_OUTOFMEMORY; printf("! Failed to delete an object from the device because we could no allocate memory for the object identifier string, hr = 0x%lx\n",hr); } // Free any allocated values in the PROPVARIANT before exiting PropVariantClear(&pv;); } else { printf("! Failed to delete an object from the device because we were returned a NULL IPortableDevicePropVariantCollection interface pointer, hr = 0x%lx\n",hr); } }
See Also
- IPortableDevice Interface
- IPortableDeviceContent Interface
- IPortableDevicePropVariantCollection Interface
- Programming Guide
Previous | Next |