2015-12-15 1 views
0

J'utilise l'API WPD (Windows Portable Devices) dans mon service Windows pour transférer des fichiers d'un dossier sur le périphérique mtp vers un dossier désigné sur mon disque dur.Pourquoi je ne reçois pas le WPD_OBJECT_ORIGINAL_FILE_NAME (ie le nom de fichier) de l'objet sur le périphérique mtp

À des fins de test, je crée un fichier xyzdata.txt sous un dossier sur le périphérique mtp. Ainsi, lorsque le code atteint un point où il le fait:

hr = content->Properties(&properties); 
    if (SUCCEEDED(hr)) 
    { 
     hr = GetStringValue(properties.Get(), 
      selection, 
      WPD_OBJECT_ORIGINAL_FILE_NAME, 
      &originalFileName); 
    } 

Le « h » est « peuplé ERROR_BUSY » et OriginalFilename n'est pas réglé du tout. Y a-t-il une raison pour laquelle le WPD_OBJECT_ORIGINAL_FILE_NAME ne peut pas être défini pour certains objets ou est-ce un problème avec la récupération des données?

Toute aide sera précieuse. Si vous avez besoin de plus de code, je l'afficherai ici.

Edit:

code d'erreur est,

hr = HRESULT_FROM_WIN32 (ERROR_BUSY): La ressource demandée est en cours d'utilisation.

De plus, l'appareil est un appareil Android. Et parfois, lorsque nous branchons le câble USB, le nom du fichier est disponible. Mais c'est rare. S'il vous plaît laissez-moi savoir ce qui se passe

Répondre

0

Trouvé une solution.

Le problème était que l'appel GetStream() ne se terminait pas avant que j'appelle GetStringValue().

Comme l'appel de la fonction GetStringValue() n'avait aucune dépendance sur le GetStream(), je les ai juste réorganisés et tout a commencé à fonctionner.

+1

MTP est très fragile et de nature incroyablement séquentielle. –