none
Abriendo múltiples archivos (OpenFileDialog, C #) RRS feed

  • Pregunta

  • Estoy intentando abrir varios archivos a la vez con OpenFileDialog, usando en FileNameslugar de FileName.  tengo el OpenFileDialog.Mulsitesect habilitado  y cuando trato de realizar x cosa con los archivos , solo me lee o me reconoce el primero dentro de los que seleccione ¿Alguien ha hecho esto antes? , es decir , como quedaria usar el FileNames correctamente para que me tenga en cuanta todos los nombres de archivos cargados .......... 
    martes, 15 de enero de 2019 20:47

Respuestas

  • Bien, en ese caso, se vuelve a aplicar al listbox lo mismo que decíamos para el OpenFileDialog, es decir, no se pueden procesar todos los archivos de golpe sino que hay que hacer un bucle que los recorra y que por cada uno de ellos vaya llamando a la rutina que estés usando para pasar de pdf a word.

    foreach (string nombreArchivo in listbox1.Items)
    {
        ConvertirPdfAWord(nombreArchivo);
    }

    Nótese que esto presume que lo que has cargado en el listbox es una serie de strigs con los nombres de archivo (no has dicho cómo lo cargas, únicamente "lo cual si hace", por lo que no poedmos deducir si efectivamente tiene strings o las entradas son de otro tipo).

    También presume que ya tienes hecho un método para convertir un archivo de pdf a word. Esto es algo tremendamente complicado de hacer, espero que ya hayas implementado el código que lo haga, posiblemente a través de alguna librería de terceros. En el ejemplo anterior he llamado a este método "ConvertirPdfAWord", pero por supuesto tendrás que cambiarlo por el nombre que realmente tenga tu método, y si requiere algún argumento adicional además del nombre de archivo, pasarle los argumentos que necesite.


    viernes, 18 de enero de 2019 15:40
    Moderador

Todas las respuestas

  • bien, con este código pasas el path de cada pdf seleccionado a una Lista, pero como haces la iteración de esta Lista y la conversión? creo que falta código ...

    Mira, este ejemplo lo tengo implementado y funciona de 10:

      private void cpdf_Click(object sender, RoutedEventArgs e)
            {
                System.Windows.Forms.OpenFileDialog op = new System.Windows.Forms.OpenFileDialog();
                op.Title = "Seleccione los archivos PDF para subir";
                op.Multiselect = true;
                op.Filter = "Archivos PDF|*.pdf";
                try
                {
                    if (op.ShowDialog() == System.Windows.Forms.DialogResult.OK)
                    {
                        if (op.FileName != null)
                        {
                            foreach (string itemfile in op.FileNames)
                            {
                                byte[] b = System.IO.File.ReadAllBytes(itemfile);
    
                                if (IsPDFHeader(b) == false)
                                {
                                    MessageBox.Show("El archivo PDF no tiene el formato correcto!" + Environment.NewLine + "Error al grabar...", "Error", MessageBoxButton.OK, MessageBoxImage.Error);
                                    return;
                                }                                                 
    
                                Models.Imagen_HC itemimagenes = new Models.Imagen_HC() { Estado = true, fmodificacion = fechaserver(), Idusuario = 0, Id_HistoriaClinica = 0, Picture = b, Tipo_Archivo = Models.Imagen_HC.Tipo.PDF };
                                Listimagenes.Add(itemimagenes);
                            }
                            actualizarVS_Imagenes();
                        }
                    }
                }
                catch (Exception ex) { MessageBox.Show(ex.Message); }            
            }
            public bool IsPDFHeader(byte[] file)
            {
               
                byte[] buffer = file; // br.ReadBytes(5);
    
                var enc = new ASCIIEncoding();
                var header = enc.GetString(buffer);
    
                //%PDF−1.0
                // If you are loading it into a long, this is (0x04034b50).
                if (buffer[0] == 0x25 && buffer[1] == 0x50
                    && buffer[2] == 0x44 && buffer[3] == 0x46)
                {
                    return header.StartsWith("%PDF-");
                }
                return false;
    
            }

    Despues de seleccionar los archivos hace una iteración para determinar si tiene el formato PDF correcto, si es asi lo agrega a una lista y actualiza la misma.

    Bueno, debería servir.

    Saludos.-

    martes, 15 de enero de 2019 15:15
  • hola

    no entendi el problema, en el codigo veo que iteras la propiedad FileNames con lo cual accedes a la seleccion que se realiza en el OpenFileDialog

    Ahora lo raro es lo que se ve debajo cuando usas

    RutaArchivoOrigen = CajaDialogo.FileName;

    alli solo tomas un uno archivo seleccionado, porque ? deberias iterar Lista.Items para tomar los archivos de alli

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 15 de enero de 2019 15:38
  • Muchas Gracias amigo , sinceramente gracias por responder tan rápidamente , bueno tu podrías explicarme algo  por favor , en el caso que mencione como hago para acceder a los items que estan dentro del ListBox , es decir ejemplo : digamos que en mi caso yo logre que se listaran los archivos que seleccione desde el pc y que estan en el listbox ,Ok ,  digo , como hago para crear un variable que contenga esos items que estan dentro del listbox para posteriormente tenerlos como en una especie de Matriz o vector Ayuda por favor 
    martes, 15 de enero de 2019 15:42

  • Muchas gracias amigo por tus asesorias , tienes razón , por ese motivo hice eso hace unos dias , pero lo que apsa es que Visual studio me arrojaba el siguiente mensaje "No se puede convertir implícitamente  el tipo  System.Windows.Forms.ListBox.ObjectCollection en String ... 

    martes, 15 de enero de 2019 16:09
  • hola

    >>"No se puede convertir implícitamente  el tipo  System.Windows.Forms.ListBox.ObjectCollection en String

    para iterar la lista podrias usar

    foreach (var item in listBox1.Items){
    
        string file = item.ToString();
    
        //resto codigo
    
    }

    saludos


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    martes, 15 de enero de 2019 17:53
  • Tienes que usar un bucle sobre FileNames:

    foreach (string fileName in OpenFileDialog1.FileNames)
    {
         // Hacer aquí lo que quieras con fileName
    }

    En otras palabras, nunca haces nada con todos los archivos a la vez, sino que los procesas iterativamente uno por uno.

    martes, 15 de enero de 2019 22:14
    Moderador
  • Muchas gracias Amigo , osea que como quedaría , me siento un poco perdido  por favor 
    miércoles, 16 de enero de 2019 16:19
  • Tienes que usar un bucle sobre FileNames:

    foreach (string fileName in OpenFileDialog1.FileNames)
    {
         // Hacer aquí lo que quieras con fileName
    }

    En otras palabras, nunca haces nada con todos los archivos a la vez, sino que los procesas iterativamente uno por uno.

    Muchas gracias amigo  , osea que como quedaria , me siento un poco perdido por favor 
    miércoles, 16 de enero de 2019 16:20
  • osea que como quedaria

    Cómo quedaría... ¿el qué? ¿qué quieres hacer con los archivos?

    En principio, quedaría como en el ejemplo que te puse, con un bucle que recorre los archivos. Y dentro del bucle ya haces lo que quieras hacer con cada uno de los archivos, que no has explicado qué es.

    miércoles, 16 de enero de 2019 17:28
    Moderador
  • osea que como quedaria

    Cómo quedaría... ¿el qué? ¿qué quieres hacer con los archivos?

    En principio, quedaría como en el ejemplo que te puse, con un bucle que recorre los archivos. Y dentro del bucle ya haces lo que quieras hacer con cada uno de los archivos, que no has explicado qué es.

    quiero hacer que los elementos del listbox  que se han cargado desde el pc se almacenen en una variable ,ayudame por fvor
    miércoles, 16 de enero de 2019 17:44
  • quiero hacer que los elementos del listbox  que se han cargado desde el pc se almacenen en una variable ,ayudame por fvor

    No lo entiendo. ¿Qué relación guarda un listbox y sus elementos con el tema de manejar la lista de archivos devueltos por un OpenFileDialog, que era de lo que estábamos hablando?

    miércoles, 16 de enero de 2019 20:27
    Moderador
  • que lo que quiero es , que cuando el usuario seleccione los archivos del pc , que estos se almacenen los nombres en el listbox (lo cual si hace) , y luego con otro boton que tengo para convertir archivos pdf a word yo pueda llamar lo que este en el listbox , lo cual no me da 
    viernes, 18 de enero de 2019 12:56
  • Bien, en ese caso, se vuelve a aplicar al listbox lo mismo que decíamos para el OpenFileDialog, es decir, no se pueden procesar todos los archivos de golpe sino que hay que hacer un bucle que los recorra y que por cada uno de ellos vaya llamando a la rutina que estés usando para pasar de pdf a word.

    foreach (string nombreArchivo in listbox1.Items)
    {
        ConvertirPdfAWord(nombreArchivo);
    }

    Nótese que esto presume que lo que has cargado en el listbox es una serie de strigs con los nombres de archivo (no has dicho cómo lo cargas, únicamente "lo cual si hace", por lo que no poedmos deducir si efectivamente tiene strings o las entradas son de otro tipo).

    También presume que ya tienes hecho un método para convertir un archivo de pdf a word. Esto es algo tremendamente complicado de hacer, espero que ya hayas implementado el código que lo haga, posiblemente a través de alguna librería de terceros. En el ejemplo anterior he llamado a este método "ConvertirPdfAWord", pero por supuesto tendrás que cambiarlo por el nombre que realmente tenga tu método, y si requiere algún argumento adicional además del nombre de archivo, pasarle los argumentos que necesite.


    viernes, 18 de enero de 2019 15:40
    Moderador