none
Отображения в ListView всех файлов и папок папки Desktop. RRS feed

  • Вопрос

  • Как мне отобразить в ListView все файлы и папки папки Desktop? Ну и естественно что бы при нажатии дважди на папку например мой компьютер она открывалась в ListView.
    • Перемещено Siddharth Chavan 1 октября 2010 г. 22:55 MSDN Forums Consolidation (От:Visual C#)
    5 февраля 2010 г. 20:33

Ответы

  • эх, опоздал с ответом, но все же:)

    //listView1, button1, button2, textBox1
    public partial class Form1 : Form
    {
        private String path;
    
        // Constants that we need in the function call
        private const int SHGFI_ICON = 0x100;
        //private const int SHGFI_SMALLICON = 0x1;
        private const int SHGFI_LARGEICON = 0x0;
        // This structure will contain information about the file
        public struct SHFILEINFO
        {
            // Handle to the icon representing the file
            public IntPtr hIcon;
            // Index of the icon within the image list
            public int iIcon;
            // Various attributes of the file
            public uint dwAttributes;
            // Path to the file
            [System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst = 256)]
            public string szDisplayName;
            // File type
            [System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst = 80)]
            public string szTypeName;
        };
        // The signature of SHGetFileInfo (located in Shell32.dll)
        [System.Runtime.InteropServices.DllImport("Shell32.dll")]
        private static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, int cbFileInfo, uint uFlags);
    
        public Form1()
        {
            InitializeComponent();
            listView1.View = View.LargeIcon;
            //listView1.View = View.SmallIcon;
            listView1.DoubleClick += new EventHandler(listView1_DoubleClick);
            button1.Text = "Выбрать папку";
            button1.Click += new EventHandler(button1_Click);
            button2.Text = "Вверх";
            button2.Click += new EventHandler(button2_Click);
            textBox1.ReadOnly = true;
            path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            textBox1.Text = path;
            GetItems(path, listView1);
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();
            folderBrowserDialog.ShowNewFolderButton = false;
            folderBrowserDialog.RootFolder = Environment.SpecialFolder.Desktop;
            if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
            {
                path = folderBrowserDialog.SelectedPath;
                textBox1.Text = path;
                GetItems(path, listView1);
            }
        }
    
        private void button2_Click(object sender, EventArgs e)
        {
            String[] s = path.Split(new char[] { '\\' });
            if (s.Length > 2)
            {
                path = path.Remove(path.Length - s[s.Length - 1].Length - 1, s[s.Length - 1].Length + 1);
                textBox1.Text = path;
                GetItems(path, listView1);
            }
            else
            {
                path = path.Remove(path.Length - s[s.Length - 1].Length, s[s.Length - 1].Length);
                textBox1.Text = path;
                GetItems(path, listView1);
            }
        }
    
        private void listView1_DoubleClick(object sender, EventArgs e)
        {
            String f = listView1.SelectedItems[0].Text;
            if (System.IO.Directory.Exists(path + "\\" + f))
            {
                //папка
                String[] s = path.Split(new char[] { '\\' });
                if (s.Length > 2 || s.Length == 2 && s[s.Length - 1].Length > 0)
                {
                    path += "\\";
                }
                path += f;
                textBox1.Text = path;
                GetItems(path, listView1);
            }
            else
            {
                //файл
                String ff = path;
                String[] s = ff.Split(new char[] { '\\' });
                if (s.Length > 2 || s.Length == 2 && s[s.Length - 1].Length > 0)
                {
                    ff += "\\";
                }
                ff += f;
                System.Diagnostics.Process.Start(ff);
            }
        }
    
        private void GetItems(String path, ListView listView)
        {
            if (System.IO.Directory.Exists(path))
            {
                string[] folders = System.IO.Directory.GetDirectories(path);
                string[] files = System.IO.Directory.GetFiles(path);
    
                //ImageList smallImageList = new ImageList();
                ImageList largeImageList = new ImageList();
                //smallImageList.ColorDepth = ColorDepth.Depth32Bit;
                largeImageList.ColorDepth = ColorDepth.Depth32Bit;
                //smallImageList.ImageSize = new System.Drawing.Size(16, 16);
                largeImageList.ImageSize = new System.Drawing.Size(32, 32);
    
                //иконки для папок
                foreach (string f in folders)
                {
                    //System.Drawing.Icon smallIcon;
                    System.Drawing.Icon largeIcon;
                    //// Will store a handle to the small icon
                    //IntPtr hImgSmall;
                    // Will store a handle to the large icon
                    IntPtr hImgLarge;
                    SHFILEINFO shinfo = new SHFILEINFO();
    
                    //// Get a handle to the small icon
                    //hImgSmall = SHGetFileInfo(f, 0, ref shinfo, System.Runtime.InteropServices.Marshal.SizeOf(shinfo), SHGFI_ICON | SHGFI_SMALLICON);
                    //// Get the small icon from the handle
                    //smallIcon = System.Drawing.Icon.FromHandle(shinfo.hIcon);
    
                    // Get a handle to the large icon
                    hImgLarge = SHGetFileInfo(f, 0, ref shinfo, System.Runtime.InteropServices.Marshal.SizeOf(shinfo), SHGFI_ICON | SHGFI_LARGEICON);
                    // Get the large icon from the handle
                    largeIcon = System.Drawing.Icon.FromHandle(shinfo.hIcon);
    
                    string[] ss = f.Split(new char[] { '\\' });
                    //smallImageList.Images.Add(ss[ss.Length - 1], smallIcon);
                    largeImageList.Images.Add(ss[ss.Length - 1], largeIcon);
                }
    
                //иконки для файлов
                foreach (string f in files)
                {
                    //System.Drawing.Icon smallIcon;
                    System.Drawing.Icon largeIcon;
                    //// Will store a handle to the small icon
                    //IntPtr hImgSmall;
                    // Will store a handle to the large icon
                    IntPtr hImgLarge;
                    SHFILEINFO shinfo = new SHFILEINFO();
    
                    //// Get a handle to the small icon
                    //hImgSmall = SHGetFileInfo(f, 0, ref shinfo, System.Runtime.InteropServices.Marshal.SizeOf(shinfo), SHGFI_ICON | SHGFI_SMALLICON);
                    //// Get the small icon from the handle
                    //smallIcon = System.Drawing.Icon.FromHandle(shinfo.hIcon);
    
                    // Get a handle to the large icon
                    hImgLarge = SHGetFileInfo(f, 0, ref shinfo, System.Runtime.InteropServices.Marshal.SizeOf(shinfo), SHGFI_ICON | SHGFI_LARGEICON);
                    // Get the large icon from the handle
                    largeIcon = System.Drawing.Icon.FromHandle(shinfo.hIcon);
    
                    string[] ss = f.Split(new char[] { '\\' });
                    //smallImageList.Images.Add(ss[ss.Length - 1], smallIcon);
                    largeImageList.Images.Add(ss[ss.Length - 1], largeIcon);
                }
    
                //listView1.SmallImageList = smallImageList;
                //listView.SmallImageList.ColorDepth = ColorDepth.Depth32Bit;
                listView1.LargeImageList = largeImageList;
                listView.LargeImageList.ColorDepth = ColorDepth.Depth32Bit;
    
                listView1.Items.Clear();
                foreach (string f in folders)
                {
                    //listView1.Items.Add(f.Replace(path + "\\", ""), f.Replace(path + "\\", ""));
                    string[] ss = f.Split(new char[] { '\\' });
                    listView1.Items.Add(ss[ss.Length - 1], ss[ss.Length - 1]);
                }
                foreach (string f in files)
                {
                    string[] ss = f.Split(new char[] { '\\' });
                    listView1.Items.Add(ss[ss.Length - 1], ss[ss.Length - 1]);
                }
            }
        }
    }
    

    как было сказано, мой комп и тд над добавлять самому

    6 февраля 2010 г. 9:05
  • // Путь до папки "Desktop" 
    string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
    // Получаем список всех файлов
    String[] files = Directory.GetFiles(path);
    Так мы получим список файлов.
    Вот тут - http://www.codeproject.com/KB/cs/GetFileTypeAndIcon.aspx смотрим как получить иконку к определенному файлу.
    По двойному нажатию вешаем команду и вызывает Proccess.Start() (http://msdn.microsoft.com/en-us/library/system.diagnostics.process.start.aspx) для запуска линки.
    Только учтите что первый код не вернут вам Мой Компьютер или Корзина - это зарезервировнные иконки и файлы, их вам нужно добавлять самому как новый элемент.
    [Мой блог], [LinkedIn]
    • Предложено в качестве ответа Denis Gladkikh 6 февраля 2010 г. 8:04
    • Помечено в качестве ответа Серый Науменко 6 февраля 2010 г. 11:32
    6 февраля 2010 г. 8:04

Все ответы

  • // Путь до папки "Desktop" 
    string path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
    // Получаем список всех файлов
    String[] files = Directory.GetFiles(path);
    Так мы получим список файлов.
    Вот тут - http://www.codeproject.com/KB/cs/GetFileTypeAndIcon.aspx смотрим как получить иконку к определенному файлу.
    По двойному нажатию вешаем команду и вызывает Proccess.Start() (http://msdn.microsoft.com/en-us/library/system.diagnostics.process.start.aspx) для запуска линки.
    Только учтите что первый код не вернут вам Мой Компьютер или Корзина - это зарезервировнные иконки и файлы, их вам нужно добавлять самому как новый элемент.
    [Мой блог], [LinkedIn]
    • Предложено в качестве ответа Denis Gladkikh 6 февраля 2010 г. 8:04
    • Помечено в качестве ответа Серый Науменко 6 февраля 2010 г. 11:32
    6 февраля 2010 г. 8:04
  • эх, опоздал с ответом, но все же:)

    //listView1, button1, button2, textBox1
    public partial class Form1 : Form
    {
        private String path;
    
        // Constants that we need in the function call
        private const int SHGFI_ICON = 0x100;
        //private const int SHGFI_SMALLICON = 0x1;
        private const int SHGFI_LARGEICON = 0x0;
        // This structure will contain information about the file
        public struct SHFILEINFO
        {
            // Handle to the icon representing the file
            public IntPtr hIcon;
            // Index of the icon within the image list
            public int iIcon;
            // Various attributes of the file
            public uint dwAttributes;
            // Path to the file
            [System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst = 256)]
            public string szDisplayName;
            // File type
            [System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.ByValTStr, SizeConst = 80)]
            public string szTypeName;
        };
        // The signature of SHGetFileInfo (located in Shell32.dll)
        [System.Runtime.InteropServices.DllImport("Shell32.dll")]
        private static extern IntPtr SHGetFileInfo(string pszPath, uint dwFileAttributes, ref SHFILEINFO psfi, int cbFileInfo, uint uFlags);
    
        public Form1()
        {
            InitializeComponent();
            listView1.View = View.LargeIcon;
            //listView1.View = View.SmallIcon;
            listView1.DoubleClick += new EventHandler(listView1_DoubleClick);
            button1.Text = "Выбрать папку";
            button1.Click += new EventHandler(button1_Click);
            button2.Text = "Вверх";
            button2.Click += new EventHandler(button2_Click);
            textBox1.ReadOnly = true;
            path = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);
            textBox1.Text = path;
            GetItems(path, listView1);
        }
    
        private void button1_Click(object sender, EventArgs e)
        {
            FolderBrowserDialog folderBrowserDialog = new FolderBrowserDialog();
            folderBrowserDialog.ShowNewFolderButton = false;
            folderBrowserDialog.RootFolder = Environment.SpecialFolder.Desktop;
            if (folderBrowserDialog.ShowDialog() == DialogResult.OK)
            {
                path = folderBrowserDialog.SelectedPath;
                textBox1.Text = path;
                GetItems(path, listView1);
            }
        }
    
        private void button2_Click(object sender, EventArgs e)
        {
            String[] s = path.Split(new char[] { '\\' });
            if (s.Length > 2)
            {
                path = path.Remove(path.Length - s[s.Length - 1].Length - 1, s[s.Length - 1].Length + 1);
                textBox1.Text = path;
                GetItems(path, listView1);
            }
            else
            {
                path = path.Remove(path.Length - s[s.Length - 1].Length, s[s.Length - 1].Length);
                textBox1.Text = path;
                GetItems(path, listView1);
            }
        }
    
        private void listView1_DoubleClick(object sender, EventArgs e)
        {
            String f = listView1.SelectedItems[0].Text;
            if (System.IO.Directory.Exists(path + "\\" + f))
            {
                //папка
                String[] s = path.Split(new char[] { '\\' });
                if (s.Length > 2 || s.Length == 2 && s[s.Length - 1].Length > 0)
                {
                    path += "\\";
                }
                path += f;
                textBox1.Text = path;
                GetItems(path, listView1);
            }
            else
            {
                //файл
                String ff = path;
                String[] s = ff.Split(new char[] { '\\' });
                if (s.Length > 2 || s.Length == 2 && s[s.Length - 1].Length > 0)
                {
                    ff += "\\";
                }
                ff += f;
                System.Diagnostics.Process.Start(ff);
            }
        }
    
        private void GetItems(String path, ListView listView)
        {
            if (System.IO.Directory.Exists(path))
            {
                string[] folders = System.IO.Directory.GetDirectories(path);
                string[] files = System.IO.Directory.GetFiles(path);
    
                //ImageList smallImageList = new ImageList();
                ImageList largeImageList = new ImageList();
                //smallImageList.ColorDepth = ColorDepth.Depth32Bit;
                largeImageList.ColorDepth = ColorDepth.Depth32Bit;
                //smallImageList.ImageSize = new System.Drawing.Size(16, 16);
                largeImageList.ImageSize = new System.Drawing.Size(32, 32);
    
                //иконки для папок
                foreach (string f in folders)
                {
                    //System.Drawing.Icon smallIcon;
                    System.Drawing.Icon largeIcon;
                    //// Will store a handle to the small icon
                    //IntPtr hImgSmall;
                    // Will store a handle to the large icon
                    IntPtr hImgLarge;
                    SHFILEINFO shinfo = new SHFILEINFO();
    
                    //// Get a handle to the small icon
                    //hImgSmall = SHGetFileInfo(f, 0, ref shinfo, System.Runtime.InteropServices.Marshal.SizeOf(shinfo), SHGFI_ICON | SHGFI_SMALLICON);
                    //// Get the small icon from the handle
                    //smallIcon = System.Drawing.Icon.FromHandle(shinfo.hIcon);
    
                    // Get a handle to the large icon
                    hImgLarge = SHGetFileInfo(f, 0, ref shinfo, System.Runtime.InteropServices.Marshal.SizeOf(shinfo), SHGFI_ICON | SHGFI_LARGEICON);
                    // Get the large icon from the handle
                    largeIcon = System.Drawing.Icon.FromHandle(shinfo.hIcon);
    
                    string[] ss = f.Split(new char[] { '\\' });
                    //smallImageList.Images.Add(ss[ss.Length - 1], smallIcon);
                    largeImageList.Images.Add(ss[ss.Length - 1], largeIcon);
                }
    
                //иконки для файлов
                foreach (string f in files)
                {
                    //System.Drawing.Icon smallIcon;
                    System.Drawing.Icon largeIcon;
                    //// Will store a handle to the small icon
                    //IntPtr hImgSmall;
                    // Will store a handle to the large icon
                    IntPtr hImgLarge;
                    SHFILEINFO shinfo = new SHFILEINFO();
    
                    //// Get a handle to the small icon
                    //hImgSmall = SHGetFileInfo(f, 0, ref shinfo, System.Runtime.InteropServices.Marshal.SizeOf(shinfo), SHGFI_ICON | SHGFI_SMALLICON);
                    //// Get the small icon from the handle
                    //smallIcon = System.Drawing.Icon.FromHandle(shinfo.hIcon);
    
                    // Get a handle to the large icon
                    hImgLarge = SHGetFileInfo(f, 0, ref shinfo, System.Runtime.InteropServices.Marshal.SizeOf(shinfo), SHGFI_ICON | SHGFI_LARGEICON);
                    // Get the large icon from the handle
                    largeIcon = System.Drawing.Icon.FromHandle(shinfo.hIcon);
    
                    string[] ss = f.Split(new char[] { '\\' });
                    //smallImageList.Images.Add(ss[ss.Length - 1], smallIcon);
                    largeImageList.Images.Add(ss[ss.Length - 1], largeIcon);
                }
    
                //listView1.SmallImageList = smallImageList;
                //listView.SmallImageList.ColorDepth = ColorDepth.Depth32Bit;
                listView1.LargeImageList = largeImageList;
                listView.LargeImageList.ColorDepth = ColorDepth.Depth32Bit;
    
                listView1.Items.Clear();
                foreach (string f in folders)
                {
                    //listView1.Items.Add(f.Replace(path + "\\", ""), f.Replace(path + "\\", ""));
                    string[] ss = f.Split(new char[] { '\\' });
                    listView1.Items.Add(ss[ss.Length - 1], ss[ss.Length - 1]);
                }
                foreach (string f in files)
                {
                    string[] ss = f.Split(new char[] { '\\' });
                    listView1.Items.Add(ss[ss.Length - 1], ss[ss.Length - 1]);
                }
            }
        }
    }
    

    как было сказано, мой комп и тд над добавлять самому

    6 февраля 2010 г. 9:05
  • Я не кого не обижу и всем балы накину:)
    6 февраля 2010 г. 11:33