none
Problemas em mostrar conteudo de arquivo RRS feed

  • Pergunta

  • Pessoal,

    Tenho uma rotina que gera arquivos txt para mim com numeros sequenciais, cada inclusão no banco gera um arquivo de numero 000001 e assim por diante...

    Preciso mostrar o conteudo deste arquivo assim que ele é gerado, isto dentro de um TextBox que aparece no momento que foi gerado o arquivo...

    Quando eu gero o arquivo ele da erro de caminho...

    Gostaria de saber se o codigo que eu fiz esta correto para executar o que eu preciso... e como devo colocar o caminho do arquivo sendo que ele esta num pasta no C:\scanner

    Eu fiz o seguinte para mostrar o conteudo "deu erro de caminho":

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Data.SqlClient;
    using System.Data.SqlTypes;
    using System.Data;
    using System.Data.Sql;
    using System.Net;
    using System.ComponentModel;
    using System.Drawing;
    using System.Windows.Forms;
    using System.Threading;
    using System.Configuration;
    using System.IO;

    namespace Controle_de_Portaria
    {
        public partial class EDI_EV96_ENTRADA : Form
        {
            public EDI_EV96_ENTRADA()
            {
                InitializeComponent();
                string conteudoarquivo;
                System.IO.StreamReader sr = new System.IO.StreamReader(@"C:\\scanner\{0}.txt");
                conteudoarquivo = sr.ReadToEnd();
                txtarquivo.Text = conteudoarquivo;

            }
        }

    }

    Se alguem puder ajudar agradeço!!!


    Luiz Carlos

    quinta-feira, 19 de abril de 2012 20:24

Respostas

  • Olá Luiz,

    A explicação acima foi para resolver o erro de "caminho inválido". O seu problema agora é outro... De acordo com o seu código, você está tentando abrir um arquivo com o nome "{0}.txt" nessa pasta... Esse arquivo existe?

    Note que o StreamReader não interpreta esse "{0}" como uma expressão "coringa" ou "placeholder"... Ele está mesmo tentando procurar um arquivo com esse nome específico.

    Se o seu objetivo é obter o arquivo mais recente da pasta, então precisa usar a classe Directory ou DirectoryInfo para enumerar os arquivos da pasta e escolher aquele que faz sentido.

    Algo mais ou menos assim:

    var pasta = new DirectoryInfo(@"C:\scanner");
    
    // Tenta obter o arquivo mais recente na pasta
    var arquivoMaisRecente = pasta.EnumerateFiles("*.txt")
        .OrderByDescending(f => f.CreationTimeUtc)
        .FirstOrDefault();
    
    // Conseguiu encontrar algum arquivo na pasta?
    if (arquivoMaisRecente != null)
    {
        // Sim...
    
        // Obtém o conteúdo do arquivo
        var conteudoArquivo = File.ReadAllText(arquivoMaisRecente.FullName);
    
        // E mostra no TextBox...
        arquivoTextBox.Text = conteudoArquivo;
    
        // ...
    }
    


    Abraços,
    Caio Proiete



    Caio Proiete
    Microsoft MVP, MCT, MCPD, MCTS, MCSD
    http://caioproiete.net
    • Marcado como Resposta LC-Locker sexta-feira, 20 de abril de 2012 15:00
    sexta-feira, 20 de abril de 2012 13:43
    Moderador

Todas as Respostas

  • Olá Luiz,

    Tem uma barra a mais no caminho do arquivo... Deveria ser @"C:\scanner\{0}.txt" ao invés de @"C:\\scanner\{0}.txt"

    O caracter "@" no C# indica que o compilador não deve tratar o caracter '\' (barra invertida) como um caracter especial, e por isso você não precisa duplicar as barras ao indicar o caminho.

    Em outras palavras:

    // Não preciso de '\\'
    string arquivo1 = @"C:\scanner\{0}.txt";
    
    // Preciso de '\\'
    string arquivo2 = "C:\\scanner\\{0}.txt";
    

    ---

    De qualquer forma, o caminho nunca deveria estar fixo dentro do código... Você deveria ter esse caminho definido num arquivo de configuração da sua aplicação (App.config) ou em uma tabela da base de dados se preferir.

    Assim, se um dia for preciso alterar o caminho de onde os arquivos são gravados, basta apenas alterar o arquivo de configuração ao invés de ter de recompilar e distribuir uma nova versão da aplicação.


    Abraços,
    Caio Proiete



    Caio Proiete
    Microsoft MVP, MCT, MCPD, MCTS, MCSD
    http://caioproiete.net
    sexta-feira, 20 de abril de 2012 00:51
    Moderador
  • Caio,

    Bom dia,

    Cara, valeu pela explicação, foi de grande ajuda! Mas não deu certo...

    Ele esta criando o arquivo no caminho correto com as informações corretas dentro do arquivo, mas quando ele abre o Form EDI_EV96_ENTRADA que contem o TextBox para visualizar o conteudo do aquivo gerado, ocorre o erro: Could not find file 'C:\scanner\{0}.txt', istos com (@"C:\scanner\{0}.txt") ou com ("C:\\scanner\\{0}.txt"), acho que o problema é que ele não sabe qual arquivo pegar nesta pasta para abrir e ler o conteudo.

    Na lógica teria que ser sempre o 1º, pois é o aquivo que acabou de ser gerado.

    Tem alguma idéia para este caso?

    Desde já obrigado pela ajuda!


    Luiz Carlos

    sexta-feira, 20 de abril de 2012 11:10
  • Amigo,

    Em que momento que voce tem o nome do arquivo que foi gerado? Voce fez um formatação "scanner\{0}.txt" porem nao atribuiu nenhum valor para a posição {0}.

    Abaixo um exemplo de codigo.

                string nomeArquivo = "NOME_DO_ARQUIVO_QUE_FOI_GERADO";
                string caminhoArquivo = string.Format(@"C:\\scanner\{0}.txt", nomeArquivo);
    
                if (System.IO.File.Exists(caminhoArquivo))
                {
                    using (System.IO.StreamReader sr = new System.IO.StreamReader(caminhoArquivo))
                    {
                        txtarquivo.Text = sr.ReadToEnd();
                    }
                }


    se a resposta foi útil, classifique :)
    ate mais,

    Rodrigo Soria

    sexta-feira, 20 de abril de 2012 11:40
  • Olá Luiz,

    A explicação acima foi para resolver o erro de "caminho inválido". O seu problema agora é outro... De acordo com o seu código, você está tentando abrir um arquivo com o nome "{0}.txt" nessa pasta... Esse arquivo existe?

    Note que o StreamReader não interpreta esse "{0}" como uma expressão "coringa" ou "placeholder"... Ele está mesmo tentando procurar um arquivo com esse nome específico.

    Se o seu objetivo é obter o arquivo mais recente da pasta, então precisa usar a classe Directory ou DirectoryInfo para enumerar os arquivos da pasta e escolher aquele que faz sentido.

    Algo mais ou menos assim:

    var pasta = new DirectoryInfo(@"C:\scanner");
    
    // Tenta obter o arquivo mais recente na pasta
    var arquivoMaisRecente = pasta.EnumerateFiles("*.txt")
        .OrderByDescending(f => f.CreationTimeUtc)
        .FirstOrDefault();
    
    // Conseguiu encontrar algum arquivo na pasta?
    if (arquivoMaisRecente != null)
    {
        // Sim...
    
        // Obtém o conteúdo do arquivo
        var conteudoArquivo = File.ReadAllText(arquivoMaisRecente.FullName);
    
        // E mostra no TextBox...
        arquivoTextBox.Text = conteudoArquivo;
    
        // ...
    }
    


    Abraços,
    Caio Proiete



    Caio Proiete
    Microsoft MVP, MCT, MCPD, MCTS, MCSD
    http://caioproiete.net
    • Marcado como Resposta LC-Locker sexta-feira, 20 de abril de 2012 15:00
    sexta-feira, 20 de abril de 2012 13:43
    Moderador
  • Caio,

    Deu certinho...

    Obrigado por mais essa aula...

    RSCS,

    Muito obrigado pela força tbm...


    Luiz Carlos

    sexta-feira, 20 de abril de 2012 15:00