将文件夹从Windows资源管理器拖放到C#中的listBox

bra*_*art 11 c# directory drag-and-drop listboxitems

我成功地开发了用于将文件从Windows资源管理器拖动到listBox的C#代码.

    // 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);  
        }
    }
Run Code Online (Sandbox Code Playgroud)

如果我将文件夹拖到listBox,则该文件夹内的所有文件都将添加到listBox项目中.

如果有人能为我提供上述任务的代码片段,对我来说会非常有帮助.

提前致谢.

Zod*_*man 13

您的代码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);
            }
        }
    }
Run Code Online (Sandbox Code Playgroud)

请注意,只会收集丢弃的文件夹根目录中的文件.如果您需要获取文件夹树中的所有文件,则需要进行一些递归来收集所有文件.


Fen*_*der 2

如果fileName是一个目录,您可以创建一个DirectoryInfo对象并循环所有文件(和子目录)

你可以看一下这段代码:

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

(您不需要使用对象,您也可以使用类DirectoryInfo中的静态方法Directory