Inquiridor
Recuperando dados de arquivos txt numa área FTP.

Pergunta
-
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? -
-
Para gravar "levar" o arquivo para o SQL um bom código é este:
http://www.codeproject.com/KB/aspnet/ImportExportCSV.aspxSe tiver problemas para usar este posso ajudar, já pequei e modifiquei todo para uma soluçãoSobre 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 istoTestei e funciona bem.Como você ainda esta um pouco na dúvida do que indico apenas os artigos com as soluções.Bom trabalho. -
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 Snippetint
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.
-
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);
}
}