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 } } }
/// <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); }
/// <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); }
/// <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); }
/// <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); }
extern static IntPtr SHGetFileInfo( string pszPath, int dwFileAttributes, out SHFILEINFO psfi, int cbFileInfo, FileInfoFlags uFlags);
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_);
/// <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)); }
/// <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)); }
private static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, uint cbFileInfo, FileInfoFlags uFlags);
public static extern IntPtr SHGetFileInfo( [MarshalAs(UnmanagedType.LPTStr)] string pszPath, uint dwFileAttributes, out SHFILEINFO psfi, uint cbFileInfo, FileInfoFlags uFlag );