2017-03-03 10 views
0

휴대용 스마트 폰에서 자동으로 사진을 가져 오기 위해 휴대용 장치 API를 실행하고 있습니다. 나는 그것을 모두 올바르게 옮겨야한다. 내가 사용하는 코드는 표준 DownloadFile() 루틴 :C# : WPD - 메타 태그가있는 사진 다운로드

이이 표준 코드에 문제가 있습니다
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; 
    } 
} 

: 1) - 이미지가 윈도우 머신에 저장하는 경우에는 EXIF ​​정보가 없음가. 이 정보는 내가 필요로하는 것입니다. 어떻게 보존합니까? 2) 저장된 파일이 너무 많아졌습니다. 예를 들어 소스 jpeg는 1,045,807 바이트이고 다운로드 한 파일은 3,942,840 바이트입니다. 다른 모든 파일과 유사합니다. unsafe {} 섹션 안의 일부가 바이트로 출력 할 것이라고 생각합니까? 데이터를 전송하는 더 좋은 방법이 있습니까? (안전한 방법입니까?)

답변

0

죄송합니다. 그것은 잘 작동합니다.이 문제를 일으키는 다른 것입니다

+0

질문을 닫을 수 없습니까? –