Ejemplo n.º 1
0
        /// <summary>
        /// Copies the specified file from the device.
        /// </summary>
        /// <param name="remoteFile"></param>
        /// <param name="localFile"></param>
        public static void CopyFromDevice(string remoteFile, string localFile)
        {
            var r = new Rapiinit();

            r.cbsize = Marshal.SizeOf(r);

            CeRapiInitEx(ref r);

            try
            {
                var remoteFilePtr = CeCreateFile(remoteFile, GenericRead, 0, 0, OpenExisting, FileAttributeNormal, 0);

                if (remoteFilePtr.ToInt32() == InvalidHandleValue)
                {
                    return;
                }

                var localFileStream = new FileStream(localFile, FileMode.Create, FileAccess.Write);

                var read = 0;

                const int size = 1024 * 4;

                var data = new byte[size];

                CeReadFile(remoteFilePtr, data, size, ref read, 0);

                while (read > 0)
                {
                    localFileStream.Write(data, 0, read);

                    if (CeReadFile(remoteFilePtr, data, size, ref read, 0) != 0)
                    {
                        continue;
                    }

                    CeCloseHandle(remoteFilePtr);

                    localFileStream.Close();

                    return;
                }

                CeCloseHandle(remoteFilePtr);

                localFileStream.Flush();
                localFileStream.Close();

                if (!File.Exists(localFile))
                {
                    throw new FileNotFoundException("The file was not copied to the desktop");
                }
            }
            finally { CeRapiUninit(); }
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Copies the specified file into the device.
        /// </summary>
        /// <param name="localFile"></param>
        /// <param name="remoteFile"></param>
        public static void CopyToDevice(string localFile, string remoteFile)
        {
            var r = new Rapiinit();

            r.cbsize = Marshal.SizeOf(r);

            CeRapiInitEx(ref r);

            try
            {
                var filePtr = CeCreateFile(remoteFile, GenericWrite, 0, 0, CreateAlways, FileAttributeNormal, 0);

                if (filePtr == new IntPtr(InvalidHandleValue))
                {
                    return;
                }

                using (var localFileStream = new FileStream(localFile, FileMode.Open, FileAccess.Read))
                {
                    var byteswritten = 0;
                    var position     = 0;
                    var buffer       = new byte[BufferSize];

                    var bytesread = localFileStream.Read(buffer, position, BufferSize);

                    while (bytesread > 0)
                    {
                        position += bytesread;

                        if (CeWriteFile(filePtr, buffer, bytesread, ref byteswritten, 0) == ErrorSuccess)
                        {
                            return;
                        }

                        try { bytesread = localFileStream.Read(buffer, 0, BufferSize); }
                        catch { bytesread = 0; }
                    }
                }
            }
            finally { CeRapiUninit(); }
        }
Ejemplo n.º 3
0
 static extern void CeRapiInitEx(ref Rapiinit pRapiInit);