0
ポータブルデバイスAPIを実行して、接続されたスマートフォンから写真を自動的に取得しています。私はそれがすべて正しく移っている。私が使用するコードは、その標準DownloadFile()ルーチンです:C#:WPD - メタタグを使用した画像のダウンロード
2つの標準的なコードに問題がある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) - 画像は、Windowsマシンに保存しているとき、何のEXIF情報はありませんが。この情報は私が必要とするものです。どのように私はそれを保存するのですか? 2)保存されたファイルは非常に膨れています。たとえば、ソースjpegは1,045,807バイトで、ダウンロードしたファイルは3,942,840バイトです。それは他のすべてのファイルに似ています。私は安全でない{}セクションの中のいくつかがバイトのためにバイトを出力するだろうと思いますか?データを転送するより良い方法はありますか? (安全な方法?)
あなたの質問を閉じることができますか? –