none
Como pegar o conteúdo de duas listBox e gravar em um TXT RRS feed

  • Pergunta

  • Bom dia Amigos!

    Pessoal tenho uma duvida, acredito que seja fácil resolver mas não estou conseguindo.

    tipo eu tenho duas listBox, uma das listBox esta o nome de imagens buscadas de um diretório, na outra listBox esta a data que cada uma foi tirada, na mesma ordem da listBox_1. Oque eu preciso fazer é pegar o conteúdo das duas listBox e gravar em um arquivo txt, pra ficar um do lado do outro, tipo o nome da imagem e ao lado a data que ela foi tirada.

    Abaixo esta o código que eu fiz, ele grava de maneira correta no documento, mas grava apenas a primeira imagem e a data que foi tirada.... as outras imagens da listBox_1 e as outras datas da listBox_2 ele não grava.

    try
    {
        // obs: lbl_CaminhoOndSalvar.Text, esta recebendo um diretorio tipo @"C:\arquivo.txt"
        File.Create(lbl_CaminhoOndSalvar.Text).Close();
        TextWriter arquivo = File.AppendText(lbl_CaminhoOndSalvar.Text);
        foreach (object conteudoDaLista_1 in lst_SelDirImagens.Items)
        {
           foreach (object conteudoDaLista_2 in lst_data.Items)
           {
              // fiz desta forma para que coloque o conteudo um do lado
              // do outro, tipo "foto" e ao lado a "data" que foi tirada
              string str = conteudoDaLista_1.ToString() + "   " + "   " + conteudoDaLista_2.ToString();
              arquivo.Write(str);
              arquivo.Write(System.Environment.NewLine);
              arquivo.Close();
              MessageBox.Show("O conteudo das duas listas foi inserido com exito no documento", "Sucesso!",
              MessageBoxButtons.OK, MessageBoxIcon.Information);
           }
        }
    }

    Desde já Agradeco....


    • Editado Sergio Lucas terça-feira, 17 de junho de 2014 13:29
    terça-feira, 17 de junho de 2014 13:26

Respostas

  • Tente fazer da seguinte maneira... 

                foreach (object conteudoDaLista_1 in lst_SelDirImagens.Items)
                {
                    foreach (object conteudoDaLista_2 in lst_data.Items)
                    {
                        // fiz desta forma para que coloque o conteudo um do lado
                        // do outro, tipo "foto" e ao lado a "data" que foi tirada
                        string str = conteudoDaLista_1.ToString() + "   " + "   " + conteudoDaLista_2.ToString();
                        arquivo.Write(str);
                        arquivo.Write(System.Environment.NewLine);
    
                    }
                }
    	    arquivo.Close();
                MessageBox.Show("O conteudo das duas listas foi inserido com exito no documento", "Sucesso!", MessageBoxButtons.OK, MessageBoxIcon.Information);



    terça-feira, 17 de junho de 2014 14:36
  • Sergio, desculpa, não me atentei devidamente a seu problema, criei um código simples porem enxuto e de boa performance.

                StreamWriter sw = new StreamWriter(Directory.GetCurrentDirectory() + "\\estado.txt");
                for (int i = 0; i < listBox1.Items.Count; i++)
                {
                    sw.WriteLine("Estado: " + listBox1.Items[i].ToString() + " e a sigla é " + listBox2.Items[i].ToString());
                }
                sw.Close();


    for é mais rápido que foreach, e como vc tem os 2 nas mesmas posições, um unico loop resolve o problema.

    meu form e output

    terça-feira, 17 de junho de 2014 15:06

Todas as Respostas

  • mude de

    TextWriter 

    para

    StreamWrite

    ficaria algo assim:

    StreamWrite sw = new StreamWrite("path");
    sw.WriteLine("o texto aqui");

    fiz de cabeça, mas é isso ai!

    terça-feira, 17 de junho de 2014 13:41
  • Ola Dietrich_Prg

    Bom eu fiz da forma que vc sugeriu, mas continua fazendo exatamente a mesma coisa de antes, pega só o primeiro elemento de cada lista.

    Tem mais alguma sugestão?

    terça-feira, 17 de junho de 2014 14:26
  • Tente fazer da seguinte maneira... 

                foreach (object conteudoDaLista_1 in lst_SelDirImagens.Items)
                {
                    foreach (object conteudoDaLista_2 in lst_data.Items)
                    {
                        // fiz desta forma para que coloque o conteudo um do lado
                        // do outro, tipo "foto" e ao lado a "data" que foi tirada
                        string str = conteudoDaLista_1.ToString() + "   " + "   " + conteudoDaLista_2.ToString();
                        arquivo.Write(str);
                        arquivo.Write(System.Environment.NewLine);
    
                    }
                }
    	    arquivo.Close();
                MessageBox.Show("O conteudo das duas listas foi inserido com exito no documento", "Sucesso!", MessageBoxButtons.OK, MessageBoxIcon.Information);



    terça-feira, 17 de junho de 2014 14:36
  • Sergio, desculpa, não me atentei devidamente a seu problema, criei um código simples porem enxuto e de boa performance.

                StreamWriter sw = new StreamWriter(Directory.GetCurrentDirectory() + "\\estado.txt");
                for (int i = 0; i < listBox1.Items.Count; i++)
                {
                    sw.WriteLine("Estado: " + listBox1.Items[i].ToString() + " e a sigla é " + listBox2.Items[i].ToString());
                }
                sw.Close();


    for é mais rápido que foreach, e como vc tem os 2 nas mesmas posições, um unico loop resolve o problema.

    meu form e output

    terça-feira, 17 de junho de 2014 15:06
  • OK deu certinho, Obrigado amigo, muito obrigado.
    terça-feira, 17 de junho de 2014 15:59