2017-03-03 6 views
0

J'utilise l'API Portable Device pour obtenir automatiquement des photos à partir d'un téléphone intelligent connecté. Je l'ai tout transférer correctement. Le code que j'utilise est que la routine standard DownloadFile():C#: WPD - Téléchargement d'une image avec des balises META

public PortableDownloadInfo DownloadFile(PortableDeviceFile file, string saveToPath) 
    { 
     IPortableDeviceContent content; 
     _device.Content(out content); 
     IPortableDeviceResources resources; 
     content.Transfer(out resources); 
     PortableDeviceApiLib.IStream wpdStream; 
     uint optimalTransferSize = 0; 
     var property = new _tagpropertykey 
     { 
      fmtid = new Guid(0xE81E79BE, 0x34F0, 0x41BF, 0xB5, 0x3F, 0xF1, 0xA0, 0x6A, 0xE8, 0x78, 0x42), 
      pid = 0 
     }; 
     resources.GetStream(file.Id, ref property, 0, ref optimalTransferSize, out wpdStream); 

     System.Runtime.InteropServices.ComTypes.IStream sourceStream = 
      // ReSharper disable once SuspiciousTypeConversion.Global 
      (System.Runtime.InteropServices.ComTypes.IStream)wpdStream; 

     var filename = Path.GetFileName(file.Name); 
     if (string.IsNullOrEmpty(filename)) 
      return null; 

     FileStream targetStream = new FileStream(Path.Combine(saveToPath, filename), 
      FileMode.Create, FileAccess.Write); 

     try 
     { 
      unsafe 
      { 
       var buffer = new byte[1024]; 
       int bytesRead; 
       do 
       { 
        sourceStream.Read(buffer, 1024, new IntPtr(&bytesRead)); 
        targetStream.Write(buffer, 0, 1024); 
       } while (bytesRead > 0); 

       targetStream.Close(); 
      } 
     } 
     finally 
     { 
      Marshal.ReleaseComObject(sourceStream); 
      Marshal.ReleaseComObject(wpdStream); 
     } 
     return pdi; 
    } 
} 

Il y a deux problèmes avec ce code standard: 1) - lorsque les images sont enregistre sur la machine Windows, il n'y a pas d'informations EXIF. cette information est ce dont j'ai besoin. comment puis-je le préserver? 2) les fichiers sauvegardés sont très gonflés. par exemple, le fichier jpeg source est de 1 045 807 octets, alors que le fichier téléchargé est de 3 942 840 octets! il est similaire à tous les autres fichiers. Je pensais que la partie à l'intérieur de la section dangereuse {} le sortirait octet pour octet? Y a-t-il un meilleur moyen de transférer les données? (un moyen sûr?)

Répondre

0

Désolé, à ce sujet. cela fonctionne bien .. c'est quelque chose d'autre qui cause ces problèmes

+0

Vous ne pouvez pas fermer votre question? –