0

我正在使用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);
            }
        }
4

1 回答 1

0

根据我的搜索,似乎我们可能找不到显示进度的方法。

因为我们不知道 PortableDevice 是如何传输的,就像我们不知道它的传输率一样,

以及最大值和最小值。

您可以查看 带有进度条的文件复制,以了解如何在复制文件时设置进度条。

于 2020-02-07T02:39:54.150 回答