Я использую https://www.nuget.org/packages/PortableDevices/ для копирования файлов в WPD.
Я могу копировать файлы, используя функцию TransferContentToDevice(___,___)
.
Прямо сейчас, это не показывает никакого диалога прогресса. Как я могу показать прогресс передачи?
Мой код
//Connect to MTP devices and pick up the first one
var devices = new PortableDeviceCollection();
devices.Refresh();
if (devices.Count > 0)
{
device = devices.First();
device.Connect();
string rootId = device.GetRootId();
device.TransferContentToDevice(@"C:\\test\testFile.mp4", rootId);
//Close the connection
device.Disconnect();
}
else {
Console.WriteLine("No device connectd");
}
Функция TransferContentToDevice () - от API переносимого устройства
public void TransferContentToDevice(string fileName, string parentObjectId)
{
IPortableDeviceContent content;
PortableDeviceClass.Content(out content);
var values = GetRequiredPropertiesForContentType(fileName, parentObjectId);
uint optimalTransferSizeBytes = 0;
content.CreateObjectWithPropertiesAndData(values, out PortableDeviceApiLib.IStream tempStream, ref optimalTransferSizeBytes, null);
var targetStream = (System.Runtime.InteropServices.ComTypes.IStream)tempStream;
try
{
using (var sourceStream = new FileStream(fileName, FileMode.Open, FileAccess.Read))
{
var buffer = new byte[optimalTransferSizeBytes];
int bytesRead;
do
{
bytesRead = sourceStream.Read(buffer, 0, (int)optimalTransferSizeBytes);
var pcbWritten = IntPtr.Zero;
targetStream.Write(buffer, bytesRead, pcbWritten);
} while (bytesRead > 0);
}
targetStream.Commit(0);
}
finally
{
Marshal.ReleaseComObject(tempStream);
}
}