2011-08-25 19 views
11

Logré desarrollar código C# para archivos de arrastre desde el explorador de Windows a listBox.Arrastrar y soltar una carpeta del Explorador de Windows a listBox en 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); 
     } 
    } 

Si arrastra una carpeta al cuadro de lista, todos los archivos que están dentro de la carpeta que se añade a los elementos de cuadro de lista.

Sería muy útil para mí si alguien puede proporcionarme el fragmento de código para la tarea anterior.

Gracias de antemano.

Respuesta

2

si fileName es un directorio puede crear un objeto DirectoryInfo y bucle a través de todos los archivos (y subdirectorios)

se puede echar un vistazo a este código:

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

(que no necesita para usar un objeto DirectoryInfo, también puede usar los métodos estáticos de la clase Directory

12

Su código para DragEnter aún aplica para carpetas.

En el evento DragDrop, recupera rutas de archivos y carpetas de la misma manera. Si arrastra combinaciones de archivos y carpetas, todos aparecerán en su matriz files. Solo necesita determinar si las rutas son carpetas o no.

El siguiente código recuperará todas las rutas de todos los archivos desde la raíz de todas las carpetas descartadas, y las rutas de todos los archivos caídos.

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); 
      } 
     } 
    } 

Tenga en cuenta que solo se recopilarán los archivos en la raíz de las carpetas eliminadas. Si necesita obtener todos los archivos en el árbol de carpetas, tendrá que hacer un poco de recursividad para recopilarlos todos.

Cuestiones relacionadas