/** * Copy To Phone */ public void TransferContentToDevice(PortableDeviceFolder parentFolder, string filePath) { PortableDeviceApiLib.IStream tempStream = null; System.Runtime.InteropServices.ComTypes.IStream targetStream = null; try { string fileName = PortableDeviceFolder.last(filePath, "\\"); // Remove existing remote file, if it exists. parentFolder.DeleteFile(this, fileName); // make sure that we are not holding on to a file. DisconnectConnect(); string parentObjectId = parentFolder.Id; IPortableDeviceContent content = getContents(); IPortableDeviceValues values = GetRequiredPropertiesForContentType(filePath, parentObjectId); uint optimalTransferSizeBytes = 0; content.CreateObjectWithPropertiesAndData( values, out tempStream, ref optimalTransferSizeBytes, null); targetStream = (System.Runtime.InteropServices.ComTypes.IStream)tempStream; long length = new System.IO.FileInfo(filePath).Length; long written = 0; long lPCt = 0; using (var sourceStream = new FileStream(filePath, FileMode.Open, FileAccess.Read)) { var buffer = new byte[optimalTransferSizeBytes]; int bytesRead; do { bytesRead = sourceStream.Read(buffer, 0, (int)optimalTransferSizeBytes); IntPtr PCbWritten = IntPtr.Zero; targetStream.Write(buffer, bytesRead, PCbWritten); written += bytesRead; long PCt = length > 0 ? (100 * written) / length : 100; if (PCt != lPCt) { lPCt = PCt; Console.WriteLine("Progress: " + lPCt); } } while (bytesRead > 0); } targetStream.Commit(0); } catch (Exception ex) { Console.WriteLine(ex.Message); throw ex; } finally { if (null != targetStream) { Marshal.ReleaseComObject(targetStream); } if (null != tempStream) { Marshal.ReleaseComObject(tempStream); } Disconnect(); } }