Example #1
0
        private MemoryStream GetFileDescriptor()
        {
            MemoryStream fileDescriptorMemoryStream = new MemoryStream();

            // Write out the FILEGROUPDESCRIPTOR.cItems value
            fileDescriptorMemoryStream.Write(BitConverter.GetBytes(1), 0, sizeof(UInt32));

            FILEDESCRIPTOR fileDescriptor = new FILEDESCRIPTOR();

            fileDescriptor.cFileName = mFileName;
            if (mContentLength > 0)
            {
                fileDescriptor.nFileSizeHigh = (UInt32)(mContentLength >> 32);
                fileDescriptor.nFileSizeLow  = (UInt32)(mContentLength & 0xFFFFFFFF);
                fileDescriptor.dwFlags       = FileDescriptorFlags.FD_FILESIZE | FileDescriptorFlags.FD_PROGRESSUI;
            }
            else
            {
                fileDescriptor.dwFlags = FileDescriptorFlags.FD_PROGRESSUI;
            }

            // Marshal the FileDescriptor structure into a byte array and write it to the MemoryStream.
            Int32  fileDescriptorSize    = Marshal.SizeOf(fileDescriptor);
            IntPtr fileDescriptorPointer = Marshal.AllocHGlobal(fileDescriptorSize);

            Marshal.StructureToPtr(fileDescriptor, fileDescriptorPointer, true);
            Byte[] fileDescriptorByteArray = new Byte[fileDescriptorSize];
            Marshal.Copy(fileDescriptorPointer, fileDescriptorByteArray, 0, fileDescriptorSize);
            Marshal.FreeHGlobal(fileDescriptorPointer);
            fileDescriptorMemoryStream.Write(fileDescriptorByteArray, 0, fileDescriptorByteArray.Length);

            return(fileDescriptorMemoryStream);
        }
Example #2
0
        private MemoryStream GetFileDescriptor(byte[] si)
        {
            MemoryStream FileDescriptorMemoryStream = new MemoryStream();

            FileDescriptorMemoryStream.Write(BitConverter.GetBytes(1), 0, sizeof(UInt32));
            FILEDESCRIPTOR FileDescriptor = new FILEDESCRIPTOR();

            FileDescriptor.cFileName = Path.GetFileName(name);
            Int64 FileWriteTimeUtc = DateTime.Now.Millisecond;

            FileDescriptor.ftLastWriteTime.dwHighDateTime = (Int32)(FileWriteTimeUtc >> 32);
            FileDescriptor.ftLastWriteTime.dwLowDateTime  = (Int32)(FileWriteTimeUtc & 0xFFFFFFFF);
            FileDescriptor.nFileSizeHigh = (UInt32)(si.Length >> 32);
            FileDescriptor.nFileSizeLow  = (UInt32)(si.Length & 0xFFFFFFFF);
            FileDescriptor.dwFlags       = NativeMethods.FD_PROGRESSUI;

            // Marshal the FileDescriptor structure into a byte array and write it to the MemoryStream.
            Int32  FileDescriptorSize    = Marshal.SizeOf(FileDescriptor);
            IntPtr FileDescriptorPointer = Marshal.AllocHGlobal(FileDescriptorSize);

            Marshal.StructureToPtr(FileDescriptor, FileDescriptorPointer, true);
            Byte[] FileDescriptorByteArray = new Byte[FileDescriptorSize];
            Marshal.Copy(FileDescriptorPointer, FileDescriptorByteArray, 0, FileDescriptorSize);
            Marshal.FreeHGlobal(FileDescriptorPointer);
            FileDescriptorMemoryStream.Write(FileDescriptorByteArray, 0, FileDescriptorByteArray.Length);

            return(FileDescriptorMemoryStream);
        }
Example #3
0
        private MemoryStream GetFileDescriptor(SelectedItem[] SelectedItems)
        {
            MemoryStream FileDescriptorMemoryStream = new MemoryStream();

            // Write out the FILEGROUPDESCRIPTOR.cItems value
            FileDescriptorMemoryStream.Write(BitConverter.GetBytes(SelectedItems.Length), 0, sizeof(UInt32));

            FILEDESCRIPTOR FileDescriptor = new FILEDESCRIPTOR();

            foreach (SelectedItem si in SelectedItems)
            {
                FileDescriptor.cFileName = si.FileName;
                Int64 FileWriteTimeUtc = si.WriteTime.ToFileTimeUtc();
                FileDescriptor.ftLastWriteTime.dwHighDateTime = (Int32)(FileWriteTimeUtc >> 32);
                FileDescriptor.ftLastWriteTime.dwLowDateTime  = (Int32)(FileWriteTimeUtc & 0xFFFFFFFF);
                FileDescriptor.nFileSizeHigh = (UInt32)(si.FileSize >> 32);
                FileDescriptor.nFileSizeLow  = (UInt32)(si.FileSize & 0xFFFFFFFF);
                FileDescriptor.dwFlags       = NativeMethods.FD_WRITESTIME | NativeMethods.FD_FILESIZE | NativeMethods.FD_PROGRESSUI;

                // Marshal the FileDescriptor structure into a byte array and write it to the MemoryStream.
                Int32  FileDescriptorSize    = Marshal.SizeOf(FileDescriptor);
                IntPtr FileDescriptorPointer = Marshal.AllocHGlobal(FileDescriptorSize);
                Marshal.StructureToPtr(FileDescriptor, FileDescriptorPointer, true);
                Byte[] FileDescriptorByteArray = new Byte[FileDescriptorSize];
                Marshal.Copy(FileDescriptorPointer, FileDescriptorByteArray, 0, FileDescriptorSize);
                Marshal.FreeHGlobal(FileDescriptorPointer);
                FileDescriptorMemoryStream.Write(FileDescriptorByteArray, 0, FileDescriptorByteArray.Length);
            }
            FileDescriptorMemoryStream.Position = 0;
            return(FileDescriptorMemoryStream);
        }
        /*
        public struct DragFileInfo
        {
            public string FileName;
            public string SourceFileName;
            public DateTime WriteTime;
            public Int64 FileSize;

            public DragFileInfo(string fileName)
            {
                FileName = Path.GetFileName(fileName);
                SourceFileName = fileName;
                WriteTime = DateTime.Now;
                FileSize = (new FileInfo(fileName)).Length;
            }
        }*/

        
        public static MemoryStream GetFileDescriptor(string filename, string content)
        {
            MemoryStream stream = new MemoryStream();
            stream.Write(BitConverter.GetBytes(1), 0, sizeof(UInt32));

            FILEDESCRIPTOR fileDescriptor = new FILEDESCRIPTOR();

            fileDescriptor.cFileName = filename;
            Int64 fileWriteTimeUtc = DateTime.Now.ToFileTimeUtc();
            fileDescriptor.ftLastWriteTime.dwHighDateTime = (Int32)(fileWriteTimeUtc >> 32);
            fileDescriptor.ftLastWriteTime.dwLowDateTime = (Int32)(fileWriteTimeUtc & 0xFFFFFFFF);
            fileDescriptor.nFileSizeHigh = (UInt32)(content.Length >> 32);
            fileDescriptor.nFileSizeLow = (UInt32)(content.Length & 0xFFFFFFFF);
            fileDescriptor.dwFlags = FD_WRITESTIME | FD_FILESIZE | FD_PROGRESSUI;

            Int32 fileDescriptorSize = Marshal.SizeOf(fileDescriptor);
            IntPtr fileDescriptorPointer = Marshal.AllocHGlobal(fileDescriptorSize);
            Byte[] fileDescriptorByteArray = new Byte[fileDescriptorSize];

            try
            {
                Marshal.StructureToPtr(fileDescriptor, fileDescriptorPointer, true);
                Marshal.Copy(fileDescriptorPointer, fileDescriptorByteArray, 0, fileDescriptorSize);
            }
            finally
            {
                Marshal.FreeHGlobal(fileDescriptorPointer);
            }
            stream.Write(fileDescriptorByteArray, 0, fileDescriptorByteArray.Length);
            return stream;
        }
Example #5
0
        public static MemoryStream GetFileDescriptor(DragFileInfo fileInfo)
        {
            MemoryStream stream = new MemoryStream();

            stream.Write(BitConverter.GetBytes(1), 0, sizeof(UInt32));

            FILEDESCRIPTOR fileDescriptor = new FILEDESCRIPTOR();

            fileDescriptor.cFileName = fileInfo.FileName;
            Int64 fileWriteTimeUtc = fileInfo.WriteTime.ToFileTimeUtc();

            fileDescriptor.ftLastWriteTime.dwHighDateTime = (Int32)(fileWriteTimeUtc >> 32);
            fileDescriptor.ftLastWriteTime.dwLowDateTime  = (Int32)(fileWriteTimeUtc & 0xFFFFFFFF);
            fileDescriptor.nFileSizeHigh = (UInt32)(fileInfo.FileSize >> 32);
            fileDescriptor.nFileSizeLow  = (UInt32)(fileInfo.FileSize & 0xFFFFFFFF);
            fileDescriptor.dwFlags       = FD_WRITESTIME | FD_FILESIZE | FD_PROGRESSUI;

            Int32  fileDescriptorSize    = Marshal.SizeOf(fileDescriptor);
            IntPtr fileDescriptorPointer = Marshal.AllocHGlobal(fileDescriptorSize);

            Byte[] fileDescriptorByteArray = new Byte[fileDescriptorSize];

            try
            {
                Marshal.StructureToPtr(fileDescriptor, fileDescriptorPointer, true);
                Marshal.Copy(fileDescriptorPointer, fileDescriptorByteArray, 0, fileDescriptorSize);
            }
            finally
            {
                Marshal.FreeHGlobal(fileDescriptorPointer);
            }
            stream.Write(fileDescriptorByteArray, 0, fileDescriptorByteArray.Length);
            return(stream);
        }
Example #6
0
        private MemoryStream GetFileDescriptor(ItemObject[] items)
        {
            //Prepare
            MemoryStream ms = new MemoryStream();

            //Prepare
            FILEDESCRIPTOR fileDescriptor = new FILEDESCRIPTOR();

            //Write count
            ms.Write(BitConverter.GetBytes(items.Length), 0, 4);

            //Write items
            foreach (var item in items)
            {
                //Setup file descriptor
                fileDescriptor.cFileName        = item.Name;
                fileDescriptor.ftLastWriteTime  = ToFILETIME(item.Modified);
                fileDescriptor.ftCreationTime   = ToFILETIME(item.Modified);
                fileDescriptor.nFileSizeHigh    = (uint)(item.Size >> 32);
                fileDescriptor.nFileSizeLow     = (uint)(item.Size & 0xffffffff);
                fileDescriptor.dwFlags          = FD_WRITESTIME | FD_CREATETIME | FD_FILESIZE | FD_PROGRESSUI;
                fileDescriptor.dwFileAttributes = item.Attributes;

                //Marshal
                int    length = Marshal.SizeOf(fileDescriptor);
                byte[] data   = new byte[length];

                //Check
                if (length > 0)
                {
                    //Allocate
                    IntPtr addr = Marshal.AllocHGlobal(length);
                    Marshal.StructureToPtr(fileDescriptor, addr, true); //Copy into memory
                    Marshal.Copy(addr, data, 0, length);                //Copy to byte array
                    Marshal.FreeHGlobal(addr);                          //Free memory

                    //Write data
                    ms.Write(data, 0, data.Length);
                }
            }

            //Return
            return(ms);
        }
Example #7
0
        private void addfile(string path, Stream stream)
        {
            FILEDESCRIPTOR fileDescriptor = new FILEDESCRIPTOR();

            fileDescriptor.dwFlags   = FD_PROGRESSUI | FD_UNICODE;
            fileDescriptor.cFileName = path;

            int size = Marshal.SizeOf(typeof(FILEDESCRIPTOR));

            byte[] bytes = new byte[size];
            IntPtr ptr   = Marshal.AllocHGlobal(size);

            try
            {
                Marshal.StructureToPtr(fileDescriptor, ptr, false);
                Marshal.Copy(ptr, bytes, 0, size);
            }
            finally
            {
                Marshal.FreeHGlobal(ptr);
            }
            stream.Write(bytes, 0, bytes.Length);
        }
Example #8
0
        private MemoryStream GetFileDescriptor(DataRow[] SelectedItems)
        {
            MemoryStream FileDescriptorMemoryStream = new MemoryStream();

            // Write out the FILEGROUPDESCRIPTOR.cItems value
            FileDescriptorMemoryStream.Write(BitConverter.GetBytes(SelectedItems.Length), 0, sizeof(UInt32));

            FILEDESCRIPTOR FileDescriptor = new FILEDESCRIPTOR();

            foreach (DataRow si in SelectedItems)
            {
                String FileName = (String)si["Name"];
                if (FileName.StartsWith(m_BaseFolder))
                {
                    FileName = FileName.Substring(this.m_BaseFolder.Length);
                }
                FileDescriptor.cFileName = FileName.Replace('/', '\\');
                Int64 FileWriteTimeUtc = DateTime.Now.ToFileTimeUtc();
                Int32 FinalSize        = Math.Max((Int32)si["Final_Size"], 1);
                FileDescriptor.ftLastWriteTime.dwHighDateTime = (Int32)(FileWriteTimeUtc >> 32);
                FileDescriptor.ftLastWriteTime.dwLowDateTime  = (Int32)(FileWriteTimeUtc & 0xFFFFFFFF);
                FileDescriptor.nFileSizeHigh = (UInt32)(FinalSize >> 32);
                FileDescriptor.nFileSizeLow  = (UInt32)(FinalSize & 0xFFFFFFFF);
                FileDescriptor.dwFlags       = NativeMethods.FD_WRITESTIME | NativeMethods.FD_FILESIZE | NativeMethods.FD_PROGRESSUI;

                // Marshal the FileDescriptor structure into a byte array and write it to the MemoryStream.
                Int32  FileDescriptorSize    = Marshal.SizeOf(FileDescriptor);
                IntPtr FileDescriptorPointer = Marshal.AllocHGlobal(FileDescriptorSize);
                Marshal.StructureToPtr(FileDescriptor, FileDescriptorPointer, true);
                Byte[] FileDescriptorByteArray = new Byte[FileDescriptorSize];
                Marshal.Copy(FileDescriptorPointer, FileDescriptorByteArray, 0, FileDescriptorSize);
                Marshal.FreeHGlobal(FileDescriptorPointer);
                FileDescriptorMemoryStream.Write(FileDescriptorByteArray, 0, FileDescriptorByteArray.Length);
            }
            return(FileDescriptorMemoryStream);
        }
Example #9
0
        private MemoryStream GetFileDescriptor(DataRow[] SelectedItems)
        {
            MemoryStream FileDescriptorMemoryStream = new MemoryStream();
              // Write out the FILEGROUPDESCRIPTOR.cItems value
              FileDescriptorMemoryStream.Write(BitConverter.GetBytes(SelectedItems.Length), 0, sizeof(UInt32));

              FILEDESCRIPTOR FileDescriptor = new FILEDESCRIPTOR();
              foreach (DataRow si in SelectedItems) {
            String FileName = (String)si["Name"];
            if (FileName.StartsWith(m_BaseFolder)) {
              FileName = FileName.Substring(this.m_BaseFolder.Length);
            }
            FileDescriptor.cFileName = FileName.Replace('/', '\\');
            Int64 FileWriteTimeUtc = DateTime.Now.ToFileTimeUtc();
            Int32 FinalSize = Math.Max((Int32)si["Final_Size"], 1);
            FileDescriptor.ftLastWriteTime.dwHighDateTime = (Int32)(FileWriteTimeUtc >> 32);
            FileDescriptor.ftLastWriteTime.dwLowDateTime = (Int32)(FileWriteTimeUtc & 0xFFFFFFFF);
            FileDescriptor.nFileSizeHigh = (UInt32)(FinalSize >> 32);
            FileDescriptor.nFileSizeLow = (UInt32)(FinalSize & 0xFFFFFFFF);
            FileDescriptor.dwFlags = NativeMethods.FD_WRITESTIME | NativeMethods.FD_FILESIZE | NativeMethods.FD_PROGRESSUI;

            // Marshal the FileDescriptor structure into a byte array and write it to the MemoryStream.
            Int32 FileDescriptorSize = Marshal.SizeOf(FileDescriptor);
            IntPtr FileDescriptorPointer = Marshal.AllocHGlobal(FileDescriptorSize);
            Marshal.StructureToPtr(FileDescriptor, FileDescriptorPointer, true);
            Byte[] FileDescriptorByteArray = new Byte[FileDescriptorSize];
            Marshal.Copy(FileDescriptorPointer, FileDescriptorByteArray, 0, FileDescriptorSize);
            Marshal.FreeHGlobal(FileDescriptorPointer);
            FileDescriptorMemoryStream.Write(FileDescriptorByteArray, 0, FileDescriptorByteArray.Length);
              }
              return FileDescriptorMemoryStream;
        }