WPF 多线程处理(5)

 

 

 

 

 

项目的目录:

 

以下是FileStroage的三个类:
分别是FileHelper,FileInfos,Win32

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;

namespace Automatically.FileStroage
{
    public class FileHelper
    {
        public static FileInfos GetFileInfo(string path)
        {
            var fileInfos = new FileInfos();
            FileInfo fi = new FileInfo(path);
            fileInfos.Icon = Win32.GetIcon(path, true);
            fileInfos.Name = fi.Name;
            fileInfos.Path = fi.FullName;
            fileInfos.Size = fi.Length;
            return fileInfos;
        }
    }
}
View Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Drawing;

namespace Automatically.FileStroage
{
    public class FileInfos
    {
        public Icon Icon { get; set; }

        public string Name { get; set; }

        public string Path { get; set; }

        public long Size { get; set; }
    }
}
View Code
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Drawing;

namespace Automatically.FileStroage
{
    public class Win32
    {  
        [DllImport("Shell32.dll")]   
        private static extern int SHGetFileInfo   
        (   
            string   pszPath,   
            uint   dwFileAttributes,   
            out   SHFILEINFO   psfi,   
            uint   cbfileInfo,   
            SHGFI   uFlags   
        );   
    
       [StructLayout(LayoutKind.Sequential)]   
       private   struct  SHFILEINFO   
       {   
            public   SHFILEINFO(bool   b)   
            {   
                hIcon=IntPtr.Zero;iIcon=0;dwAttributes=0;szDisplayName="";szTypeName="";   
            }   
            public   IntPtr   hIcon;   
            public   int   iIcon;   
            public   uint   dwAttributes;   
            [MarshalAs(UnmanagedType.LPStr,   SizeConst=260)]   
            public   string   szDisplayName;   
            [MarshalAs(UnmanagedType.LPStr,   SizeConst=80)]   
            public   string   szTypeName;   
       };

       private Win32()   
       {   
       }   
    
       private   enum   SHGFI   
       {   
            SmallIcon       =   0x00000001,   
            LargeIcon       =   0x00000000,   
            Icon         =   0x00000100,   
            DisplayName       =   0x00000200,   
            Typename       =   0x00000400,   
            SysIconIndex     =   0x00004000,   
            UseFileAttributes   =   0x00000010   
       }   

       public  static  Icon GetIcon(string   strPath,   bool   bSmall)   
       {   
            SHFILEINFO   info   =   new   SHFILEINFO(true);   
            int   cbFileInfo   =   Marshal.SizeOf(info);   
            SHGFI   flags;   
            if   (bSmall)   
              flags   =   SHGFI.Icon|SHGFI.SmallIcon|SHGFI.UseFileAttributes;   
            else   
              flags   =   SHGFI.Icon|SHGFI.LargeIcon|SHGFI.UseFileAttributes;   
    
            SHGetFileInfo(strPath,   256,   out   info,(uint)cbFileInfo,   flags);   
            return   Icon.FromHandle(info.hIcon);   
       }  
    }
}
View Code

 

下一篇:WPF 多线程处理(6)

上一篇:WPF 多线程处理(4)

posted @ 2013-10-17 18:46  风清扬 No.1  阅读(2237)  评论(1编辑  收藏  举报