将文件夹从Windows资源管理器拖放到C#中的listBox
我成功地开发了用于将文件从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); } }
如果我将文件夹拖到listBox,则该文件夹内的所有文件都将添加到listBox项目中。
如果有人能为我提供上述任务的代码片段,对我来说会非常有帮助。
提前致谢。
您的DragEnter
代码仍适用于文件夹。
在DragDrop
事件中,您以相同的方式检索文件路径和文件夹路径。 如果拖动文件和文件夹的组合,它们都将显示在files
数组中。 您只需要确定路径是否是文件夹。
以下代码将从删除的所有文件夹的根目录中检索所有文件的所有路径,并删除所有文件的路径。
private void listBox1_DragDrop(object sender, DragEventArgs e) { List filepaths = new List (); 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); } } }
请注意,只会收集丢弃的文件夹根目录中的文件。 如果您需要获取文件夹树中的所有文件,则需要进行一些递归以收集所有文件。
如果fileName
是一个目录,你可以创建一个DirectoryInfo
对象并循环遍历所有文件(和子目录)
你可以看看这段代码:
http://weblogs.asp.net/israelio/archive/2004/06/23/162913.aspx
(您不需要使用DirectoryInfo
对象,也可以使用Directory
类中的静态方法