Перетащите папку из Windows Explorer в listBox в C # - PullRequest
11 голосов
/ 25 августа 2011

Мне удалось разработать код C # для перетаскивания файлов из проводника Windows в listBox.

    // Drag and Drop Files to Listbox
    private void listBox1_DragEnter(object sender, DragEventArgs e)
    {
        if (e.Data.GetDataPresent(DataFormats.FileDrop, false))
            e.Effect = DragDropEffects.All;
        else
            e.Effect = DragDropEffects.None;
    }

    private void listBox1_DragDrop(object sender, DragEventArgs e)
    {
        string[] files = (string[])e.Data.GetData(DataFormats.FileDrop, false);
        foreach (string fileName in files)
        {
           listBox1.Items.Add(fileName);  
        }
    }

Если я перетащу папку в список, все файлы, которые находятся внутри папки, будут добавлены в элементы списка.

Было бы очень полезно, если бы кто-нибудь мог предоставить мне фрагмент кода для вышеуказанной задачи.

Заранее спасибо.

Ответы [ 2 ]

13 голосов
/ 26 июля 2012

Ваш код для DragEnter все еще применяется к папкам.

В событии DragDrop вы получаете пути к файлам и пути к папкам одинаковым образом. Если вы перетаскиваете комбинации файлов и папок, все они будут отображаться в вашем массиве files. Вам просто нужно определить, являются ли пути папками или нет.

Следующий код извлечет все пути всех файлов из корня всех удаленных папок и пути всех файлов.

    private void listBox1_DragDrop(object sender, DragEventArgs e)
    {
        List<string> filepaths = new List<string>();
        foreach (var s in (string[])e.Data.GetData(DataFormats.FileDrop, false))
        {
            if (Directory.Exists(s))
            {
                //Add files from folder
                filepaths.AddRange(Directory.GetFiles(s));
            }
            else
            {
                //Add filepath
                filepaths.Add(s);
            }
        }
    }

Обратите внимание, что будут собраны только файлы в корне удаленных папок. Если вам нужно получить все файлы в дереве папок, вам потребуется выполнить небольшую рекурсию, чтобы собрать их все.

2 голосов
/ 25 августа 2011

, если fileName - это каталог, вы можете создать объект DirectoryInfo и просмотреть все файлы (и подкаталоги)

Вы можете взглянуть на этот код:

http://weblogs.asp.net/israelio/archive/2004/06/23/162913.aspx

(вам не нужно использовать DirectoryInfo объект, вы также можете использовать статические методы из Directory класса

...