コード例 #1
0
 /// <summary>
 /// Flushes the stream
 /// </summary>
 public override void Flush()
 {
     if (fileStream == null)
     {
         throw new ObjectDisposedException("fileStream", "storage stream no longer available");
     }
     fileStream.Commit(0);
 }
コード例 #2
0
ファイル: MsgHelper.cs プロジェクト: alex765022/IBN
        public void Commit()
        {
            System.Runtime.InteropServices.ComTypes.IStream ppstm = getStream("__properties_version1.0");
            IntPtr pm = new IntPtr();

            byte[] p = properties.ToArray();

            ppstm.Write(p, p.Length, pm);
            ppstm.Commit(0);

            strge.Commit(0);

            properties.Close();
            properties = null;
        }
コード例 #3
0
ファイル: MsgHelper.cs プロジェクト: alex765022/IBN
        protected void SetUTF(string key, uint keyValue, string value)
        {
            System.Runtime.InteropServices.ComTypes.IStream ppstm = getStream(key);
            IntPtr pm = new IntPtr();

            byte[] p = Encoding.UTF8.GetBytes(value);

            ppstm.Write(p, p.Length, pm);
            ppstm.SetSize(p.Length);

            ppstm.Commit(0);
            Marshal.ReleaseComObject(ppstm);

            modifyProperty(keyValue, p.Length + 1);
        }
コード例 #4
0
        public void TransferContentToDevice(string fileName, string parentObjectId)
        {
            IPortableDeviceContent content;

            this._device.Content(out content);

            IPortableDeviceValues values =
                GetRequiredPropertiesForContentType(fileName, parentObjectId);

            PortableDeviceApiLib.IStream tempStream;
            uint optimalTransferSizeBytes = 0;

            content.CreateObjectWithPropertiesAndData(
                values,
                out tempStream,
                ref optimalTransferSizeBytes,
                null);

            System.Runtime.InteropServices.ComTypes.IStream 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);
                        IntPtr pcbWritten = IntPtr.Zero;
                        if (bytesRead < (int)optimalTransferSizeBytes)
                        {
                            targetStream.Write(buffer, bytesRead, pcbWritten);
                        }
                        else
                        {
                            targetStream.Write(buffer, (int)optimalTransferSizeBytes, pcbWritten);
                        }

                        /*targetStream.Write(
                         *      buffer, (int)optimalTransferSizeBytes, pcbWritten);*/
                    } while (bytesRead > 0);
                }
                targetStream.Commit(0);
            } finally {
                Marshal.ReleaseComObject(tempStream);
            }
        }
コード例 #5
0
        /// <summary>
        /// 写入数据
        /// </summary>
        /// <param name="sourceFile"></param>
        /// <param name="portableDevice"></param>
        /// <param name="parentId"></param>
        private static void TransferContentToDevice(string sourceFile, PortableDeviceClass portableDevice, string parentId)
        {
            IPortableDeviceContent content;

            portableDevice.Content(out content);


            IPortableDeviceValues values = GetRequiredPropertiesForContentType(sourceFile, parentId);


            IStream tempStream;
            uint    optimalTransferSizeBytes = 0;

            content.CreateObjectWithPropertiesAndData(values, out tempStream, ref optimalTransferSizeBytes, null);


            System.Runtime.InteropServices.ComTypes.IStream targetStream = (System.Runtime.InteropServices.ComTypes.IStream)tempStream;


            try
            {
                using (FileStream sourceStream = new FileStream(sourceFile, FileMode.Open, FileAccess.Read))
                {
                    int bytesRead = 0;
                    do
                    {
                        int    count  = 1024 * 1024;
                        byte[] buffer = new byte[count];
                        bytesRead = sourceStream.Read(buffer, 0, count);


                        IntPtr pcbWritten = IntPtr.Zero;
                        targetStream.Write(buffer, bytesRead, pcbWritten);
                    }while (bytesRead > 0);
                }
                targetStream.Commit(0);
            }
            finally
            {
                Marshal.ReleaseComObject(tempStream);
            }
        }
コード例 #6
0
        /// <summary>
        /// 写入数据
        /// </summary>
        /// <param name="sourceFile"></param>
        /// <param name="parentId"></param>
        public bool TransferContentToDevice(string sourceFile, string parentId)
        {
            bool bRet = true;
            IPortableDeviceValues values = GetRequiredPropertiesForContentType(sourceFile, parentId);

            PortableDeviceApiLib.IStream tempStream = null;
            uint optimalTransferSize = 0;

            try
            {
                deviceContent.CreateObjectWithPropertiesAndData(values, out tempStream, ref optimalTransferSize, null);
                System.Runtime.InteropServices.ComTypes.IStream targetStream = (System.Runtime.InteropServices.ComTypes.IStream)tempStream;

                using (FileStream sourceStream = new FileStream(sourceFile, FileMode.Open, FileAccess.Read))
                {
                    int    filesize   = (int)optimalTransferSize;
                    int    bytesRead  = 0;
                    IntPtr pcbWritten = IntPtr.Zero;
                    do
                    {
                        byte[] buffer = new byte[filesize];
                        bytesRead = sourceStream.Read(buffer, 0, filesize);
                        targetStream.Write(buffer, bytesRead, pcbWritten);
                    }while (bytesRead > 0);
                }
                targetStream.Commit(0);
            }
            catch (Exception)
            {
                bRet = false;
            }
            finally
            {
                Marshal.ReleaseComObject(tempStream);
            }

            return(bRet);
        }
コード例 #7
0
ファイル: PortableDevice.cs プロジェクト: grzwolf/cfw
        // UPLOAD file
        public bool UploadFileToWPD(string fileName, string parentObjectId)
        {
            bool success = false;
            IPortableDeviceContent content;

            this._device.Content(out content);
            IPortableDeviceValues values = this.GetRequiredPropertiesForContentType(fileName, parentObjectId);

            PortableDeviceApiLib.IStream tempStream;
            uint optimalTransferSizeBytes = 0;

            content.CreateObjectWithPropertiesAndData(values, out tempStream, ref optimalTransferSizeBytes, null);
            System.Runtime.InteropServices.ComTypes.IStream targetStream = (System.Runtime.InteropServices.ComTypes.IStream)tempStream;
            try {
                using (FileStream sourceStream = new FileStream(fileName, FileMode.Open, FileAccess.Read)) {
                    byte[] buffer = new byte[optimalTransferSizeBytes];
                    int    bytesRead;
                    do
                    {
                        bytesRead = sourceStream.Read(buffer, 0, (int)optimalTransferSizeBytes);
                        IntPtr pcbWritten = IntPtr.Zero;
                        if (bytesRead > 0)
                        {
                            targetStream.Write(buffer, bytesRead, pcbWritten);
                        }
                    } while (bytesRead > 0);
                }
                targetStream.Commit(0);
                success = true;
            } catch {
                success = false;
            } finally {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(tempStream);
            }
            return(success);
        }
コード例 #8
0
        /**
         * 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();
            }
        }
コード例 #9
0
ファイル: PortableDevice.cs プロジェクト: grzwolf/cfw
        // COPY inside of the same WPD
        public bool CopyInsideWPD2(PortableDeviceFile file, string parentObjectId)
        {
            bool success = false;

            // WPD source
            IPortableDeviceContent contentSrc;

            this._device.Content(out contentSrc);
            IPortableDeviceResources resourcesSrc;

            contentSrc.Transfer(out resourcesSrc);
            PortableDeviceApiLib.IStream wpdStreamSrc;
            uint            optimalTransferSizeSrc = 0;
            _tagpropertykey propertySrc            = new _tagpropertykey();

            propertySrc.fmtid = new Guid(0xE81E79BE, 0x34F0, 0x41BF, 0xB5, 0x3F, 0xF1, 0xA0, 0x6A, 0xE8, 0x78, 0x42);
            propertySrc.pid   = 0;
            resourcesSrc.GetStream(file.Id, ref propertySrc, 0, ref optimalTransferSizeSrc, out wpdStreamSrc);
            System.Runtime.InteropServices.ComTypes.IStream streamSrc = (System.Runtime.InteropServices.ComTypes.IStream)wpdStreamSrc;

            // WPD destination
            IPortableDeviceContent contentDst;

            this._device.Content(out contentDst);
            IPortableDeviceValues values = this.GetRequiredPropertiesForCopyWPD(file, parentObjectId);

            PortableDeviceApiLib.IStream tempStream;
            uint optimalTransferSizeBytes = 0;

            contentDst.CreateObjectWithPropertiesAndData(values, out tempStream, ref optimalTransferSizeBytes, null);
            System.Runtime.InteropServices.ComTypes.IStream streamDst = (System.Runtime.InteropServices.ComTypes.IStream)tempStream;

            try {
                unsafe {
                    byte[] buffer = new byte[1024];
                    int    bytesRead;
                    do
                    {
                        // read from source
                        streamSrc.Read(buffer, 1024, new IntPtr(&bytesRead));

                        // write to destination
                        IntPtr pcbWritten = IntPtr.Zero;
                        if (bytesRead > 0)
                        {
                            streamDst.Write(buffer, bytesRead, pcbWritten);
                        }
                    } while (bytesRead > 0);
                }
                success = true;
                streamDst.Commit(0);
            } catch (Exception) {
                success = false;
            } finally {
                System.Runtime.InteropServices.Marshal.ReleaseComObject(tempStream);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(streamSrc);
                System.Runtime.InteropServices.Marshal.ReleaseComObject(wpdStreamSrc);
            }

            return(success);
        }
コード例 #10
0
        public bool CopyFileToDevice(string sourceName, string destinationName, bool deleteOriginal = true)
        {
            bool result;

            PortableDeviceFile file;

            FileStream fs;

            PortableDeviceFolder destinationFolder;
            IStream stream;



            destinationFolder = this.GetFolder(GetDirectoryNameUnsafe(destinationName));

            if (destinationFolder != null)
            {
                result = false;
                fs     = new FileStream(sourceName, FileMode.Open, FileAccess.Read);

                if (fs != null)
                {
                    if (deleteOriginal == true)
                    {
                        file = GetCachedFile(destinationName) as PortableDeviceFile;

                        if (file == null)
                        {
                            file = GetFile(destinationName);
                        }

                        if (file != null)
                        {
                            DeleteFile(destinationName);
                        }
                    }

                    stream = CreateAndOpenFile(destinationName, fs.Length);

                    if (stream != null)
                    {
                        //    IPortableDeviceResources resources;
                        //    file.content.Transfer(out resources);

                        destinationFolder.parentDevice.Connect();

                        //PortableDeviceApiLib.IStream wpdStream;
                        //uint optimalTransferSize = 0;

                        //resources.GetStream(file.Id, ref PortableDeviceConstants.WPD_RESOURCE_DEFAULT, PortableDeviceConstants.STGM_WRITE, ref optimalTransferSize, out wpdStream);


                        _ULARGE_INTEGER c**t;

                        //c**t.QuadPart = (ulong)fs.Length;

                        //stream.SetSize(c**t);


                        System.Runtime.InteropServices.ComTypes.IStream sourceStream = (System.Runtime.InteropServices.ComTypes.IStream)stream;
                        //sourceStream.Commit(0);

                        IntPtr pBytesWritten = Marshal.AllocHGlobal(4);

                        byte[] buffer = new byte[1024];

                        int bytesRead,
                            bytesWritten;


                        do
                        {
                            bytesRead = fs.Read(buffer, 0, buffer.Length);

                            sourceStream.Write(buffer, bytesRead, pBytesWritten);

                            bytesWritten = Marshal.ReadInt32(pBytesWritten);
                        } while (bytesRead > 0 && bytesWritten > 0);


                        sourceStream.Commit(0);

                        Marshal.FreeHGlobal(pBytesWritten);

                        fs.Close();
                        destinationFolder.parentDevice.Disconnect();

                        result = true;
                    }
                    else
                    {
                        throw new Exception("Unable to open file or create destination file");
                    }
                }
                else
                {
                    throw new Exception("Unable to open source file for reading");
                }
            }
            else
            {
                throw new Exception("Destination folder does not exist");
            }


            return(result);
        }
コード例 #11
0
        internal void CopyToDevice(string source, string destination, bool overwrite)
        {
            IPortableDeviceContent content;

            ComDeviceObject.Content(out content);
            string parentObjectId = null;

            FindParentObjectId(Path.GetDirectoryName(destination), ref parentObjectId);
            if (string.IsNullOrEmpty(parentObjectId))
            {
                throw new Exception("destination folder has not been found.");
            }

            IPortableDeviceValues values =
                GetRequiredPropertiesForContentType(source, destination, parentObjectId);

            PortableDeviceApiLib.IStream wpdStream = null;
            uint optimalTransferSize = 0;

            content.CreateObjectWithPropertiesAndData(
                values,
                out wpdStream,
                ref optimalTransferSize,
                null);
            System.Runtime.InteropServices.ComTypes.IStream targetStream = null;
            try
            {
                targetStream = (System.Runtime.InteropServices.ComTypes.IStream)wpdStream;
                FileStream sourceStream = new FileStream(source, FileMode.Open, FileAccess.Read);
                unsafe
                {
                    try
                    {
                        var buffer = new byte[optimalTransferSize];
                        int bytesRead;
                        do
                        {
                            bytesRead = sourceStream.Read(buffer, 0, (int)optimalTransferSize);
                            IntPtr pcbWritten = IntPtr.Zero;
                            if (bytesRead < (int)optimalTransferSize)
                            {
                                targetStream.Write(buffer, bytesRead, pcbWritten);
                            }
                            else
                            {
                                targetStream.Write(buffer, (int)optimalTransferSize, pcbWritten);
                            }
                        } while (bytesRead > 0);
                        targetStream.Commit(0);
                    }
                    catch (ArgumentException e)
                    {
                        throw new Exception("Some argument has problem, remember this API can't overwrite" +
                                            "file on the device side! message: " + e.Message);
                    }
                    finally
                    {
                        sourceStream.Close();
                    }
                }
            }
            finally
            {
                Marshal.ReleaseComObject(wpdStream);
                Marshal.ReleaseComObject(targetStream);
            }
        }