FTP
using System;
using System.Collections.Generic;
using System.Data;
using System.IO;
using System.Net;
public class AcessoFTP
{
#region Varáveis privadas
private string addressFTP;
private string userFTP;
private string passwordFTP;
private string filePathFTP;
private string filePathLocal;
private string msgStatus;
private bool modoPassivo = true;
private List listaFTP;
private DataTable tbListaFTP;
#endregion
#region Variáveis públicas
/// Endereço FTP
public string ftpEndereco
{
get { return this.addressFTP; }
set { this.addressFTP = value; }
}
/// Usuário FTP
public string ftpUsuario
{
get { return this.userFTP; }
set { this.userFTP = value; }
}
/// Senha FTP
public string ftpSenha
{
get { return this.passwordFTP; }
set { this.passwordFTP = value; }
}
///
/// Upload: Caminho do arquivo que será armazenado no servidor.
/// Download: Caminho onde o arquivo será armazenado quando baixado do servidor FTP.
///
public string ftpCaminhoArquivoLocal
{
get { return this.filePathLocal; }
set { this.filePathLocal = value; }
}
///
/// Upload: Nome com o qual o arquivo que será armazenado no servidor.
/// Download: Nome do arquivo que será baixado do servidor.
///
public string ftpArquivoFTP
{
get { return this.filePathFTP; }
set { this.filePathFTP = value; }
}
/// Status da última operação
public string mensagemStatus
{
get { return this.msgStatus; }
}
///
/// True -> Modo Passivo; False -> Modo Ativo
///
public bool ftpModoPassivo
{
set { this.modoPassivo = value; }
}
/// Armazena numa lista, o conteúdo do diretório filtrado.
public List ftpDiretorioFTP
{
get { return this.listaFTP; }
}
/// Armazena num DataTable, o conteúdo do diretório filtrado.
public DataTable ftpTbListaFTP
{
get { return this.tbListaFTP; }
}
#endregion
#region Métodos que compõem a rotina
/// Realiza upload de arquivos via FTP
/// Retorna true se a operação for bem sucedida, em caso contrário, retorna false
public bool ftpUpload()
{
bool sucesso;
try
{
//O endereço deverá estar no seguinte formato: ftp://servidor.com/nomeArquivo.ext
string caminho = this.addressFTP + "/" + Path.GetFileName(this.filePathFTP);
//Cria uma solicitação FTP
FtpWebRequest ftpRequest = (FtpWebRequest)FtpWebRequest.Create(caminho);
ftpRequest.Method = WebRequestMethods.Ftp.UploadFile;
ftpRequest.Credentials = new NetworkCredential(this.userFTP, this.passwordFTP);
ftpRequest.UsePassive = this.modoPassivo;
ftpRequest.UseBinary = true;
ftpRequest.KeepAlive = false;
//Carrega o arquivo que será enviado para o servidor FTP
FileStream arquivo = File.OpenRead(this.filePathLocal);
byte[] buffer = new byte[arquivo.Length];
arquivo.Read(buffer, 0, buffer.Length);
arquivo.Close();
//Upload file
Stream reqStream = ftpRequest.GetRequestStream();
reqStream.Write(buffer, 0, buffer.Length);
reqStream.Close();
this.msgStatus = "";
sucesso = true;
}
catch (Exception oErro)
{
this.msgStatus = oErro.Message;
sucesso = false;
}
return sucesso;
}
/// Realiza download de arquivos via FTP
/// Retorna true se a operação for bem sucedida, em caso contrário, retorna false
public bool ftpDownload()
{
bool sucesso;
byte[] downloadedData = new byte[0];
try
{
//O endereço deverá estar no seguinte formato: ftp://servidor.com/arquivo.txt
string caminho = this.addressFTP + "/" + Path.GetFileName(this.filePathFTP);
//Cria uma solicitação FTP
FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(caminho);
//Now get the actual data
request = (FtpWebRequest)FtpWebRequest.Create(caminho);
request.Method = WebRequestMethods.Ftp.DownloadFile;
request.Credentials = new NetworkCredential(this.userFTP, this.passwordFTP);
request.UsePassive = this.modoPassivo;
request.UseBinary = true;
request.KeepAlive = false; // Fechar a conexão quando concluído
FtpWebResponse response = request.GetResponse() as FtpWebResponse;
Stream reader = response.GetResponseStream();
// Transfere para a memória
// Nota: ajustar os fluxos aqui para fazer o download diretamente para o disco rígido
MemoryStream memStream = new MemoryStream();
byte[] buffer = new byte[1024]; //downloads in chuncks
while (true)
{
// Tenta ler os dados
int bytesRead = reader.Read(buffer, 0, buffer.Length);
if (bytesRead == 0)
{
break;
}
else
{
//Escreve o conteúdo baixado
memStream.Write(buffer, 0, bytesRead);
}
}
// Converter o fluxo baixado para um array de bytes
downloadedData = memStream.ToArray();
reader.Close();
memStream.Close();
response.Close();
// Escreve os bytes do arquivo
FileStream newFile = new FileStream(this.filePathLocal, FileMode.Create);
newFile.Write(downloadedData, 0, downloadedData.Length);
newFile.Close();
sucesso = true;
}
catch (Exception oErro)
{
this.msgStatus = oErro.Message;
sucesso = false;
}
return sucesso;
}
/// Preenche uma lista e DataTable com os dados do diretório FTP
/// Retorna true se a operação for bem sucedida, em caso contrário, retorna false
public bool ftpListarDiretorios()
{
List files = new List();
bool sucesso;
string conteudo;
try
{
//O endereço deverá estar no seguinte formato: ftp://servidor.com/pastaDestino
string caminho = this.addressFTP + "/" + Path.GetFileName(this.filePathFTP);
//Cria uma solicitação FTP
FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(caminho);
request.Method = WebRequestMethods.Ftp.ListDirectory;
request.Credentials = new NetworkCredential(this.userFTP, this.passwordFTP);
request.UsePassive = this.modoPassivo;
request.UseBinary = true;
request.KeepAlive = false;
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
this.tbListaFTP = new DataTable();
this.tbListaFTP.Columns.Add("Descrição", typeof(string));
this.tbListaFTP.Columns.Add("Caminho", typeof(string));
while (!reader.EndOfStream)
{
conteudo = reader.ReadLine();
this.tbListaFTP.Rows.Add(conteudo, conteudo);
files.Add(conteudo);
}
reader.Close();
responseStream.Close();
response.Close();
this.msgStatus = "";
sucesso = true;
}
catch (Exception oErro)
{
this.msgStatus = oErro.Message;
sucesso = false;
}
this.listaFTP = files;
return sucesso;
}
/// Preenche uma lista e DataTable com os dados do diretório FTP
/// Extensão dos arquivos (*.ext)
/// Retorna true se a operação for bem sucedida, em caso contrário, retorna false
public bool ftpListarDiretorios(string extensao)
{
List files = new List();
bool sucesso;
string conteudo;
try
{
//O endereço deverá estar no seguinte formato: ftp://servidor.com/pastaDestino
string caminho = this.addressFTP + "/" + Path.GetFileName(this.filePathFTP);
//Cria uma solicitação FTP
FtpWebRequest request = (FtpWebRequest)FtpWebRequest.Create(caminho);
request.Method = WebRequestMethods.Ftp.ListDirectory;
request.Credentials = new NetworkCredential(this.userFTP, this.passwordFTP);
request.UsePassive = this.modoPassivo;
request.UseBinary = true;
request.KeepAlive = false;
FtpWebResponse response = (FtpWebResponse)request.GetResponse();
Stream responseStream = response.GetResponseStream();
StreamReader reader = new StreamReader(responseStream);
this.tbListaFTP = new DataTable();
this.tbListaFTP.Columns.Add("Descrição", typeof(string));
this.tbListaFTP.Columns.Add("Caminho", typeof(string));
while (!reader.EndOfStream)
{
conteudo = reader.ReadLine();
// Se a extensão for a exigida.
if (Path.GetExtension(conteudo).ToUpper() == extensao.ToUpper())
{
this.tbListaFTP.Rows.Add(conteudo, conteudo);
files.Add(conteudo);
}
}
reader.Close();
responseStream.Close();
response.Close();
this.msgStatus = "";
sucesso = true;
}
catch (Exception oErro)
{
this.msgStatus = oErro.Message;
sucesso = false;
}
this.listaFTP = files;
return sucesso;
}
/// Deleta um arquivo de um diretório FTP
/// Retorna true se a operação for bem sucedida, em caso contrário, retorna false
public bool ftpDeletarArquivo()
{
bool sucesso;
try
{
//O endereço deverá estar no seguinte formato: ftp://servidor.com/nomeArquivo.ext
string caminho = this.addressFTP + "/" + Path.GetFileName(this.filePathFTP);
//Cria uma solicitação FTP
FtpWebRequest ftpRequest = (FtpWebRequest)FtpWebRequest.Create(caminho);
ftpRequest.Method = WebRequestMethods.Ftp.DeleteFile;
ftpRequest.Credentials = new NetworkCredential(this.userFTP, this.passwordFTP);
ftpRequest.UsePassive = this.modoPassivo;
ftpRequest.UseBinary = true;
ftpRequest.KeepAlive = false;
// Deleta o arquivo
FtpWebResponse response = (FtpWebResponse)ftpRequest.GetResponse();
response.Close();
this.msgStatus = "";
sucesso = true;
}
catch (Exception oErro)
{
this.msgStatus = oErro.Message;
sucesso = false;
}
return sucesso;
}
#endregion
}
Sem comentários:
Enviar um comentário