Esempio n. 1
0
        public SftpFileInfo(PacketReader pr, string basepath, string filename, string longname)
        {
            DirectoryName = basepath;
            Name          = filename;

            FileInfoFlags flags = (FileInfoFlags)pr.ReadUInt32();

            if (flags.HasFlag(FileInfoFlags.SSH_FILEXFER_ATTR_SIZE))
            {
                Length = pr.ReadUInt64();
            }
            if (flags.HasFlag(FileInfoFlags.SSH_FILEXFER_ATTR_UIDGID))
            {
                pr.ReadUInt32(); pr.ReadUInt32(); // user, group
            }
            if (flags.HasFlag(FileInfoFlags.SSH_FILEXFER_ATTR_PERMISSIONS))
            {
                Permissions = (PermissionsFlags)pr.ReadUInt32();
            }
            if (flags.HasFlag(FileInfoFlags.SSH_FILEXFER_ATTR_ACMODTIME))
            {
                LastAccessTime = Util.ConvertEpoch((double)pr.ReadUInt32() * 1000);
                LastWriteTime  = Util.ConvertEpoch((double)pr.ReadUInt32() * 1000);
            }
            if (flags.HasFlag(FileInfoFlags.SSH_FILEXFER_ATTR_EXTENDED))
            {
                int extendedCount = pr.ReadInt32();
                for (int j = 0; j < extendedCount; j++)
                {
                    pr.ReadString(); pr.ReadString(); // extended type, extended data
                }
            }
        }
Esempio n. 2
0
        /// <summary>
        /// 获取磁盘驱动器图标
        /// </summary>
        /// <param name="driverMark">有效的磁盘标号,如C、D、I等等,不区分大小写</param>
        /// <param name="isSmallIcon">标识是获取小图标还是获取大图标</param>
        /// <param name="imageIndex">输出与返回图标对应的系统图标索引号</param>
        /// <returns>返回一个Icon类型的磁盘驱动器图标对象</returns>
        public static Icon GetDriverIcon(char driverMark, bool isSmallIcon, out long imageIndex)
        {
            imageIndex = ErrorDriverIndex;
            //非有效盘符,返回封装的磁盘图标
            if (driverMark < 'a' && driverMark > 'z' && driverMark < 'A' && driverMark > 'Z')
            {
                return(null);
            }
            string driverName = driverMark.ToString().ToUpper() + ":\\";

            FileInfomation shfi   = new FileInfomation();
            FileInfoFlags  uFlags = FileInfoFlags.SHGFI_ICON | FileInfoFlags.SHGFI_SHELLICONSIZE | FileInfoFlags.SHGFI_USEFILEATTRIBUTES;

            if (isSmallIcon)
            {
                uFlags |= FileInfoFlags.SHGFI_SMALLICON;
            }
            else
            {
                uFlags |= FileInfoFlags.SHGFI_LARGEICON;
            }

            int iTotal = (int)SHGetFileInfo(driverName, (uint)FileAttributeFlags.FILE_ATTRIBUTE_DEVICE, ref shfi, (uint)Marshal.SizeOf(shfi), (uint)uFlags);

            Icon icon = null;

            if (iTotal > 0)
            {
                icon       = Icon.FromHandle(shfi.hIcon).Clone() as Icon;
                imageIndex = shfi.iIcon;
            }

            DestroyIcon(shfi.hIcon); //释放资源
            return(icon);
        }
Esempio n. 3
0
        /// <summary>根据文件信息标志提取指定文件路径的图标</summary>
        /// <param name="filePath">文件路径</param>
        /// <param name="flags">文件信息标志</param>
        /// <returns>获取到的图标</returns>
        public static Icon GetIcon(string filePath, FileInfoFlags flags)
        {
            SHFILEINFO info  = new SHFILEINFO();
            IntPtr     hInfo = SHGetFileInfo(filePath, 0, ref info, (uint)Marshal.SizeOf(info), flags);

            if (hInfo.Equals(IntPtr.Zero))
            {
                return(null);
            }
            Icon icon = (Icon)Icon.FromHandle(info.hIcon).Clone();

            DestroyIcon(info.hIcon); //释放资源
            return(icon);
        }
Esempio n. 4
0
            /// <summary>
            /// Retrieve a folder icon with specific path
            /// </summary>
            public static Icon GetFolderIcon(string folderPath, IconSize size, FolderType folderType)
            {
                FileInfoFlags flags = FileInfoFlags.SHGFI_ICON | FileInfoFlags.SHGFI_USEFILEATTRIBUTES;

                flags |= (size == IconSize.Small) ? FileInfoFlags.SHGFI_SMALLICON : FileInfoFlags.SHGFI_LARGEICON;

                if (folderType == FolderType.Opened)
                {
                    flags |= FileInfoFlags.SHGFI_OPENICON;
                }

                ShellFileInfo shellFileInfo = new ShellFileInfo();

                SHGetFileInfo(folderPath, FILE_ATTRIBUTE_DIRECTORY, ref shellFileInfo, (uint)Marshal.SizeOf(shellFileInfo), (uint)flags);

                // Deep copy
                Icon icon = (Icon)Icon.FromHandle(shellFileInfo.hIcon).Clone();

                // Release icon handle
                DestroyIcon(shellFileInfo.hIcon);

                return(icon);
            }
Esempio n. 5
0
            /// <summary>
            /// Retrieve a file icon with specific path name
            /// </summary>
            public static Icon GetFileIcon(string filePath, IconSize size, bool addLinkOverlay)
            {
                FileInfoFlags flags = FileInfoFlags.SHGFI_ICON | FileInfoFlags.SHGFI_USEFILEATTRIBUTES;

                flags |= (size == IconSize.Small) ? FileInfoFlags.SHGFI_SMALLICON : FileInfoFlags.SHGFI_LARGEICON;

                if (addLinkOverlay)
                {
                    flags |= FileInfoFlags.SHGFI_LINKOVERLAY;
                }

                ShellFileInfo shellFileInfo = new ShellFileInfo();

                SHGetFileInfo(filePath, FILE_ATTRIBUTE_NORMAL, ref shellFileInfo, (uint)Marshal.SizeOf(shellFileInfo), (uint)flags);

                // Deep copy
                Icon icon = (Icon)Icon.FromHandle(shellFileInfo.hIcon).Clone();

                // Release icon handle
                DestroyIcon(shellFileInfo.hIcon);

                return(icon);
            }
Esempio n. 6
0
 extern static IntPtr SHGetFileInfo(
     string pszPath,
     int dwFileAttributes,
     out SHFILEINFO psfi,
     int cbFileInfo,
     FileInfoFlags uFlags);
Esempio n. 7
0
 static extern IntPtr SHGetFileInfo(
     string pszPath,
     int dwFileAttributes,
     out SHFILEINFO psfi,
     int cbFileInfo,
     FileInfoFlags uFlags);
 extern static IntPtr SHGetFileInfo(
     string _pszPath_,
     int _dwFileAttributes_,
     out Shfileinfo _psfi_,
     int _cbFileInfo_,
     FileInfoFlags _uFlags_);
Esempio n. 9
0
        /// <summary>获取文件夹、磁盘驱动器的图标</summary>
        /// <param name="folderPath">文件夹或磁盘驱动器路径</param>
        /// <returns>获取到的图标</returns>
        public static Icon GetFolderIcon(string folderPath)
        {
            FileInfoFlags flags = FileInfoFlags.SHGFI_ICON | FileInfoFlags.SHGFI_LARGEICON;

            return(GetIcon(folderPath, flags));
        }
Esempio n. 10
0
        /// <summary>获取文件类型的关联图标</summary>
        /// <param name="extension">文件类型的扩展名,如.txt</param>
        /// <returns>获取到的图标</returns>
        public static Icon GetExtensionIcon(string extension)
        {
            FileInfoFlags flags = FileInfoFlags.SHGFI_ICON | FileInfoFlags.SHGFI_LARGEICON | FileInfoFlags.SHGFI_USEFILEATTRIBUTES;

            return(GetIcon(extension, flags));
        }
Esempio n. 11
0
 private static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbFileInfo, FileInfoFlags uFlags);
Esempio n. 12
0
 public static extern IntPtr SHGetFileInfo(
     [MarshalAs(UnmanagedType.LPTStr)]
     string pszPath,
     uint dwFileAttributes,
     out SHFILEINFO psfi,
     uint cbFileInfo,
     FileInfoFlags uFlag
     );