none
Ao carretar um txt, dá erro de caminho inválido no C# RRS feed

  • Pergunta

  • Bom dia a todos/as.

    estou tentando carregar um arquivo de texto num grid view, mas quando seleciono o arquivo, recebo uma mensagem dizendo que o caminho é invalido:

    "Certifique-se de que o nome do caminho esteja escrito corretamente e que você esteja conectado ao servidor no qual o arquivo reside"

    quando eu uso a variável "teste", que só tem o nome do arquivo, ainda assim, o sistema dá o erro na hora de popular o dataset com o conteúdo do dataadapter.

    como eu resolvo isso?

    muito obrigado.

    OpenFileDialog vAbreArq = new OpenFileDialog();
                vAbreArq.Filter =
                "Arquivo de Texto (*.txt)|*.txt";
                vAbreArq.RestoreDirectory = true;
                vAbreArq.Title = "Selecione o Arquivo";
                vAbreArq.DefaultExt =
                 "Arquivo de Texto (*.txt)|*.txt";
                if (vAbreArq.ShowDialog() == DialogResult.OK)
                {
                    TBxCaminhoEArquivo.Text = vAbreArq.FileName;
                    DataSet ds = new DataSet();
                    OleDbConnection conexao = new OleDbConnection("Provider=Microsoft.ACE.OLEDB.12.0; " +
                    " Data Source= " + vAbreArq.FileName + ";" +
                    " Extended Properties=\"Text;HDR=NO;FMT=Delimited\"");
                    string teste = System.IO.Path.GetFileName(vAbreArq.FileName);
                    OleDbDataAdapter da = new OleDbDataAdapter("Select * From " + teste, conexao);
    
    
                   
    
    
                    try
                    {
                        this.Cursor = Cursors.WaitCursor;
       aqui dá erro-->  da.Fill(ds);
                        DGVParceirosImportados.DataSource = ds.Tables[0];
                        DGVParceirosImportados.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.DisplayedCellsExceptHeader;
    terça-feira, 12 de março de 2013 12:52

Respostas

  • Amigo, bom dia

    Vi aqui seu código, a questão ai é que na string de conexão você deverá passar o caminho do diretório sem o nome do arquivo.

    fiz umas modificações para funcionar na minha máquina, da uma olhada:

    OpenFileDialog vAbreArq = new OpenFileDialog();
                vAbreArq.Filter =
                "Arquivo de Texto (*.txt)|*.txt";
                vAbreArq.RestoreDirectory = true;
                vAbreArq.Title = "Selecione o Arquivo";
                vAbreArq.DefaultExt =
                 "Arquivo de Texto (*.txt)|*.txt";
                if (vAbreArq.ShowDialog() == DialogResult.OK)
                {
                    TBxCaminhoEArquivo.Text = vAbreArq.FileName;
                    DataSet ds = new DataSet();
                    string diretorio = System.IO.Path.GetDirectoryName(vAbreArq.FileName);
                    using (OleDbConnection conexao = new OleDbConnection(string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Text;HDR=NO;FMT=Delimited\"", diretorio)))
                    {
                        
                        string teste = System.IO.Path.GetFileName(vAbreArq.FileName);
                        OleDbDataAdapter da = new OleDbDataAdapter("Select * From " + teste, conexao);
    
                        this.Cursor = Cursors.WaitCursor;
                        da.Fill(ds);
                        DGVParceirosImportados.DataSource = ds.Tables[0];
                        DGVParceirosImportados.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.DisplayedCellsExceptHeader;
                    }
                }


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Twitter @Olavooneto
    Facebook Olavo Neto
    Linkedin Olavo Neto
    Se for útil marque como resposta e faça um Developer feliz :)

    • Marcado como Resposta joaoluizbt terça-feira, 12 de março de 2013 14:22
    terça-feira, 12 de março de 2013 13:24

Todas as Respostas

  • Amigo, bom dia

    Vi aqui seu código, a questão ai é que na string de conexão você deverá passar o caminho do diretório sem o nome do arquivo.

    fiz umas modificações para funcionar na minha máquina, da uma olhada:

    OpenFileDialog vAbreArq = new OpenFileDialog();
                vAbreArq.Filter =
                "Arquivo de Texto (*.txt)|*.txt";
                vAbreArq.RestoreDirectory = true;
                vAbreArq.Title = "Selecione o Arquivo";
                vAbreArq.DefaultExt =
                 "Arquivo de Texto (*.txt)|*.txt";
                if (vAbreArq.ShowDialog() == DialogResult.OK)
                {
                    TBxCaminhoEArquivo.Text = vAbreArq.FileName;
                    DataSet ds = new DataSet();
                    string diretorio = System.IO.Path.GetDirectoryName(vAbreArq.FileName);
                    using (OleDbConnection conexao = new OleDbConnection(string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Text;HDR=NO;FMT=Delimited\"", diretorio)))
                    {
                        
                        string teste = System.IO.Path.GetFileName(vAbreArq.FileName);
                        OleDbDataAdapter da = new OleDbDataAdapter("Select * From " + teste, conexao);
    
                        this.Cursor = Cursors.WaitCursor;
                        da.Fill(ds);
                        DGVParceirosImportados.DataSource = ds.Tables[0];
                        DGVParceirosImportados.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.DisplayedCellsExceptHeader;
                    }
                }


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Twitter @Olavooneto
    Facebook Olavo Neto
    Linkedin Olavo Neto
    Se for útil marque como resposta e faça um Developer feliz :)

    • Marcado como Resposta joaoluizbt terça-feira, 12 de março de 2013 14:22
    terça-feira, 12 de março de 2013 13:24
  • Bom dia Olavo,

    Fiz as alterações aqui, só tirei o "using" na declaração do oledbdataadapter porque a variavel conexão não era reconhecida no contexto abaixo nas linhas seguintes.

    o problema é que agora surge a mensatem que a connectionstring não foi inicializada.

    Obrigado pelo seu empenho.

            private void btnSelecionarArquivo_Click(object sender, EventArgs e)
            {
                OpenFileDialog vAbreArq = new OpenFileDialog();
                vAbreArq.Filter =
                "Arquivo de Texto (*.txt)|*.txt";
                vAbreArq.RestoreDirectory = true;
                vAbreArq.Title = "Selecione o Arquivo";
                vAbreArq.DefaultExt =
                 "Arquivo de Texto (*.txt)|*.txt";
                if (vAbreArq.ShowDialog() == DialogResult.OK)
                {
                    TBxCaminhoEArquivo.Text = vAbreArq.FileName;
                    DataSet ds = new DataSet();
                    string diretorio = System.IO.Path.GetDirectoryName(vAbreArq.FileName);
                    OleDbConnection conexao = new OleDbConnection(string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties=\"Text;HDR=NO;FMT=Delimited\"", diretorio));
                    using (conexao) ;
    
                    try
                    {
                        string teste = System.IO.Path.GetFileName(vAbreArq.FileName);
                        OleDbDataAdapter da = new OleDbDataAdapter("Select * From " + teste, conexao);
                        this.Cursor = Cursors.WaitCursor;
                        da.Fill(ds);
                        DGVParceirosImportados.DataSource = ds.Tables[0];
                        DGVParceirosImportados.AutoSizeColumnsMode = System.Windows.Forms.DataGridViewAutoSizeColumnsMode.DisplayedCellsExceptHeader;
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show("Erro ao acessar os dados: " + ex.Message);
                    }
                    finally
                    {
                        conexao.Close();
                        this.Cursor = Cursors.Default;
                    }
                    BtnImportarWebshare.Enabled = true;
                    LblQuantidadeLinhas.Text = DGVParceirosImportados.RowCount.ToString();
                }
    
            }

    terça-feira, 12 de março de 2013 13:47
  • Amigo, tire a linha 

    using (conexao) ;


    Olavo Oliveira Neto
    http://olavooneto.wordpress.com
    Twitter @Olavooneto
    Facebook Olavo Neto
    Linkedin Olavo Neto
    Se for útil marque como resposta e faça um Developer feliz :)

    terça-feira, 12 de março de 2013 14:46