none
Recuperando dados de arquivos txt numa área FTP. RRS feed

  • Pergunta

  •  

    Olá pessoal.

     

    Preciso criar uma rotina que lê arquivos txt postados via FTP.

     

    Alguém tem alguma dica de como fazer isso em C#.....

     

     

    Abraços.

    quinta-feira, 17 de julho de 2008 03:30

Todas as Respostas

  • Não ficou bem claro mais vamos lá. Primeiramente com uma perguntas.

    1 - O local (maquina) que o arquivo vai ficar é o mesmo que roda o aplicativo .Net?

    Se não a primeira pergunta
    2 - Como pretende alcançar o arquivo? Tem que ser via ftp ou pode ser por http?
    segunda-feira, 21 de julho de 2008 14:21
  •  

    Olá Sérgio.  Quanto ao local do arquivo ainda não sei exatamente, mas gostaria de saber nas três situações: local, FTP, HTTP

     

    Tem alguma dica?

     

    Grato.

     

     

     

    segunda-feira, 21 de julho de 2008 15:57
  • Para gravar "levar" o arquivo para o SQL um bom código é este:
    http://www.codeproject.com/KB/aspnet/ImportExportCSV.aspx
    Se tiver problemas para usar este posso ajudar, já pequei e modifiquei todo para uma solução
     
     
    Sobre pegar o arquivo por http procure por HTTP Request. Um bom exemplo é este:
     
     
    Por ftp não conheço. Mais uma pequena busca no Google ache isto
    Testei e funciona bem.
     
    Como você ainda esta um pouco na dúvida do que indico apenas os artigos com as soluções.
     
    Bom trabalho.
    terça-feira, 22 de julho de 2008 01:21
  • Olá pessoal.

     

    Para fazer download de arquivos via FTP Estou utilizando o seguinte código.

     

    Alguém alguma dica de como verificar se chegou algum arquivo numa área FTP?

     

    Ex:

    Preciso verificar a cada x tempo se tem arquivos novos numa área definida para a transmissão.

     

    Code Snippet

    int bytesProcessed = 0;

    Stream servidorStream = null;

    Stream localStream = null;

    WebResponse webResponse = null;

    try

    {

    WebRequest request = WebRequest.Create("endereco");

    request.Credentials = new NetworkCredential("***", "***");

    if (request != null)

    {

    webResponse = request.GetResponse();

    if (webResponse != null)

    {

    servidorStream = webResponse.GetResponseStream();

    localStream = File.Create(Application.StartupPath + "\\Download\\Teste.xml");

    byte[] buffer = new byte[1024];

    int bytesRead;

    do

    {

    bytesRead = servidorStream.Read(buffer, 0, buffer.Length);

    localStream.Write(buffer, 0, bytesRead);

    bytesProcessed += bytesRead;

    }

    while (bytesRead > 0);

    }

    }

    }

    catch (Exception err) { }

    finally

    {

    if (webResponse != null) webResponse.Close();

    if (servidorStream != null) servidorStream.Close();

    if (localStream != null) localStream.Close();

    }

     

     

     

    Abraços.

     

    terça-feira, 5 de agosto de 2008 11:47
  • Valdair

     

    Para trabalhar com ftp sugiro que voce der uma olhada em FtpWebRequest e FtpWebResponse para pegar maiores informações de como funciona a transferencia de arquivos via Ftp. Vou postar um exemplo de como conseguir fazer uma troca de arquivos entre uma maquina cliente e um servidor de Ftp.

     

    String ftpEntrada = "ftp://0.0.0.0/Retorno/";
            String ftpSaida = "ftp://0.0.0.0/Envio";
            String ftpSaidaTabela = "ftp://0.0.0.0/Tabelas/";
            String user = "bgntransf";
            String password = "48H2.iM0";

     

    public void MonitorarFtp()
            {
                Thread.BeginCriticalRegion();
                {
                    try
                    {
                        //Novo ftpWebRequest a ser lido
                        this.ftpRequest = (FtpWebRequest)FtpWebRequest.Create(ftpSaida);
                        this.ftpRequest.Method = WebRequestMethods.Ftp.ListDirectoryDetails;
                        this.ftpRequest.Proxy = null;
                        this.ftpRequest.Credentials = new NetworkCredential(user, password);

                        //Atribuindo a stream de resposta do servidor a um StreamReader
                        StreamReader arquivos = new StreamReader(this.ftpRequest.GetResponse().GetResponseStream());

                        //Efetuando a leitura do arquivo de resposta do servidor ftp
                        String listaArquivos = arquivos.ReadToEnd();

                        //Fechando streamReader
                        arquivos.Close();

                        if (listaArquivos != String.Empty)
                        {
                            String[] arrayArquivos = listaArquivos.Split(new string[] { "\r\n" }, StringSplitOptions.None);
                            Thread[] t = new Thread[arrayArquivos.Length - 1];
                            Int32 total = arrayArquivos.Length - 1;

                            for (int contador = 0; contador < total; contador++)
                            {
                                int pos = arrayArquivos[contador].IndexOf(':');
                                String nomeArquivo = arrayArquivos[contador].Substring(pos + 4);
                                t[contador] = new Thread(new ParameterizedThreadStart(TransfereArquivoTciBgn));
                                t[contador].Start(nomeArquivo);
                                t[contador].Join();
                            }                       
                        }
                    }
                    catch (WebException webex)
                    {
                        throw new WebException(webex.Message);
                    }
                   
                }
                Thread.EndCriticalRegion();
            }

     

    /// <summary>
            /// Metodo para efetuar transferencia de arquivos
            ///do servidor ou maquina local para um servidor de ftp
            /// </summary>
            /// <param name="fullPath">Caminho completo do arquivo que irar ser transferido</param>
            /// <param name="fileName">Nome do arquivo que irar ser trasnferido</param>
            public void TransfereArquivoLocalFtp(String fullPath,String fileName)
            {
                try
                {
                    this.ftpRequest = (FtpWebRequest)FtpWebRequest.Create(ftpEntrada +  fileName);
                    this.ftpRequest.Method = WebRequestMethods.Ftp.UploadFile;
                    this.ftpRequest.Proxy = null;                       
                    this.ftpRequest.Credentials = new NetworkCredential(user, password);
                    this.ftpRequest.UsePassive = true;               

                    FileInfo arquivoLocal = new FileInfo(fullPath);
                    Byte[] fileContents = new Byte[arquivoLocal.Length];

                    using (FileStream fs = arquivoLocal.OpenRead())
                    {
                        fs.Read(fileContents, 0, fileContents.Length);
                    }

                    using (Stream writer = ftpRequest.GetRequestStream())
                    {
                        writer.Write(fileContents, 0, fileContents.Length);
                    }

                    //Gets the FtpWebResponse of the uploading operation

                    //this.ftpResponse = (FtpWebResponse)this.ftpRequest.GetResponse();
                    //this.ftpResponse.Close();


                }
                catch (WebException webex)
                {

                    throw new WebException(webex.Message);
                }           
            }

     

    /// <summary>
            /// Metodo para efetuar transferencia de arquivos
            /// do servidor de ftp para a maquina local ou servidor especifico
            /// </summary>
            /// <param name="fileName"></param>
            public void TransfereArquivoFtpLocal(Object fileName)
            {
                try
                {
                    this.ftpRequest = (FtpWebRequest)FtpWebRequest.Create(ftpSaida + "/" + fileName.ToString());
                    this.ftpRequest.Method = WebRequestMethods.Ftp.DownloadFile;
                    this.ftpRequest.Proxy = null;
                    this.ftpRequest.Credentials = new NetworkCredential(user, password);

                    ftpResponse = (FtpWebResponse)this.ftpRequest.GetResponse();


                    //Atribuindo o arquivo que estar sendo baixado para a streamReader
                    StreamReader sr = new StreamReader(ftpResponse.GetResponseStream());

                    StreamWriter sw = new StreamWriter(@"C:\Xml-Tci\Entrada\" + fileName.ToString(), false, Encoding.ASCII);

                    sw.Write(sr.ReadToEnd());

                    //Fechando StreamReader
                    sr.Close();
                    //Fechando StreamWriter
                    sw.Close();
                    //Fechando FtpWebResponse
                    this.ftpResponse.Close();
                   
                    //Apagando arquivo do servidor Ftp
                    this.ftpRequest = (FtpWebRequest)FtpWebRequest.Create(ftpSaida + "/" + fileName.ToString());
                    this.ftpRequest.Method = WebRequestMethods.Ftp.DeleteFile;
                    this.ftpRequest.Proxy = null;
                    this.ftpRequest.Credentials = new NetworkCredential(user, password);

                    this.ftpResponse = (FtpWebResponse)ftpRequest.GetResponse();
                    this.ftpResponse.Close();

                    using (Log log = new Log())
                    {
                        String mensagem = DateTime.Now + " Exclusão do arquivo " + fileName.ToString() + " do servidor Ftp";

                        Thread t = new Thread(new ParameterizedThreadStart(log.GerarLogTransacaoRealizada));
                        t.Start(mensagem);
                    }
                   
                }
                catch (WebException webex)
                {

                    throw new WebException(webex.Message);
                }
            }

     

    segunda-feira, 25 de agosto de 2008 16:46