Configurar FTP para download de arquivos, em C# - .NET - Fórum iMasters
Configurar FTP para download de arquivos, em C#
By André Mailho, June 8, 2009 in .NET
Fala ai galera, to com um novo problema! Dessa vez eu preciso configurar um ftpclient para download! E a coisa é mais complicada do que eu pensava, nao sei nem ao certo por onde começar. Mas eu vou tentar explicar xD.
Atraves de um search eu vou listar alguns arquivos em uma gridView (por exemplo, todos os arquivos de uma empresa selecionada), feito isso eu poderei escolher um arquivo (geralmente txt) para download. Eu achei alguns códigos para fazer o download, mas todos requerem que eu use uma nova classe! como por exemplo neste site:
me aparece um erro dizendo que a namespace nao foi encontrada! por que eu nao estou usando a classe criada por eles! Nao existe um meio mais pratico? Alguem poderia me mostrar como fazer essas tres etapas?
1º ---- Search do arquivo
2º ---- Exibi-los no gridiView (preciso exibir no gridView os dados basicos do arquivo, como: nome, tamanho,extensao e data de criação)
3º----- Download dos arquivos encontrados
Qualquer coisa ja sera de grande ajuda.
Veja se te auxilia: http://www.macoratti.net/vb_ftp1.htm
Eu nao etendi muito bem esse tutorial do Macoratti! parece que ele ensina a configurar o FTP em VB.net para window form!
Eu preciso de c# pra web xD.
Ainda nao consigo converter assim.
Movido Plataforma .NET http://forum.imasters.com.br/public/style_emoticons/default/seta.gif Plataforma .NET » Web Applications
Este artigo faz justamente o que pediu, ele lista os arquivos locais e os arquivos ftp e pode ser feito up e down.
O problema é que é windows e vb.
Vou ver se encontro algo em C#.
Eu achei um site com o codigo para listar os itens da pasta depois do seach!
http://foreachcode.wordpress.com/2008/10/1...e-um-diretorio/
consegui resolver a parte de listar os arquivos ! estava com problema para achar a forma correta de colocar o endereço da pasta! que ficoua ssim:
loadFolder(gvResultadoBusca, Server.MapPath(@"~/pasta/"));
o problema é que eu estou listando os arquivos com um if:
if (nome.Text == "Homolog" &&   TipCli.Text == "Juridico" && Ano.Text == "2004")
gridViewBusca.Visible = true;
codigo que preenche o grid puxando os arquivos da pasta
gridViewBusca.Visible = false;
Só que isso nao é nada pratico, por que vou ter que fazer um if para cada nome, tipo de cliente e ano existente! imagina quantos vao existir! deve haver uma maneira mais pratica.
Se você quer esconder determinadas pastas não terá jeito, só no if mesmo.
Ou organize de outra forma essas pastas.
entao, qual é essa "Outra" forma xD
Cara você esta batendo em quesitos que não tem muito a ver com a tecnologia .NET
Você quer listar todas as pastas de um diretório e esconder a pasta x e pasta Y, você terá que informar manualmente, ou retirar esta pasta X e Y desta diretório.
Nao tem a ver com .Net? Como assim?
Eu preciso dar um search de acordo com os dados da busca! Nao entendi por que nao tem a ver! eu nao posso retirar a pasta! ela tem que existir. Mas se nao tem outra maneira entao beleza.
se alguem puder me ajudar nos outros pontos vlw
De uma olhada neste tópico, é windows mas a idéia é a mesma: http://forum.imasters.com.br/index.php?showtopic=347683
Ele lista os diretórios de uma pasta.
Ok, eu vi que ele queria abrir os arquivos de uma pasta para edita-los. Entao o primeiro codigo postado nao me ajudaria nao é!? no ultimo ele utiliza aquele metodo, mas acho que com o mesmo objetivo de editar os arquivos da pasta!?
Consegui resolver! sem usar if fiz o sistema de busca a partir do que for selecionado nos comoBox usando DirectoryInfo!
protected void btBuscarArquivos_Click(object sender, EventArgs e)
loadFolder(gvResultadoBusca, Server.MapPath(@"/pasta" + "/" + comboBox1.SelectedItem.Text.Trim()
+ "/" + ComboBox2.SelectedItem.Text.Trim()
+ "/" + comboBox3.SelectedItem.Text.Trim() + "/"));
Dessa forma eu adiciono ao caminho original (C:\Documents and Settings\andre.m.COLDWELL\Desktop\Documentação\pasta) o que for selecionado no combo! para isso as pastas e subpastas devem existir e ter o mesmo nome do que for selecionado.
Falta agora a ULTIMA PARTE!!!!!!!!!!!!!!!!!
fazer o download dos arquivos que estiverem selecionados pelo checkBox.
Eu achei achei um codigo mas ainda nao esta funcionando:
protected void btnDownload_Click(object sender, EventArgs e)
FileInfo arquivo = default(FileInfo);
string nomeArquivo = null;
foreach (GridViewRow gvr in gvResultadoBusca.Rows)
CheckBox checkBox = gvr.FindControl("chkSelect") as CheckBox;
nomeArquivo = Server.MapPath(@"/pasta" + "/" + comboBox1.SelectedItem.Text.Trim()
+ "/" + comboBox3.SelectedItem.Text.Trim() + "/" + checkBox.Checked+ "/");
arquivo = new FileInfo(nomeArquivo);
Response.AddHeader("Content-Disposition", "attachment; filename=" + checkBox.Checked);
Response.WriteFile(nomeArquivo);
só eu ainda nao estou capturando o arquivo que esta selecionado pelo checkBox! ele chama o valor TRUE (checked=true) e nao o arquivo! Alem disso eu preciso configurar para baixar todos os arquivos de uma vez que etiverem selecionados pelo check.
Brigadao. to quase no fim! Agradeço toda a ajuda.
O que você esta concatenando é checkBox.Checked, utilize a propriedade Text para listar o texto do seu checkBox.
Entao, eu mudei pra text mas ele ainda nao retorna o nome do arquivo! apenas true! e ele ainda mostra o erro:
Could not find file 'C:\pasta\comboBox1\comboBox2\comboBox3\'.
Ele deveria mostrar o nome do arquivo selecionado no final do endereço!
Eu tentei assim:
foreach (GridViewRow gvr in this.gvResultadoBusca.Rows)
string arquivoSelec = gvr.Cells[1].Text;
DirectoryInfo nomeArquivo = new DirectoryInfo("pastaEntrada/subpasta" + "/" + comboBox1.SelectedItem.Text.Trim()
+ "/" + comboBox2.SelectedItem.Text.Trim() + "/" + comboBox3.SelectedItem.Text.Trim()
+ "/" + arquivoSelec);
//bool check = (gvr.FindControl("chkSelect") as CheckBox).Checked;
CheckBox check = gvr.FindControl("chkSelect") as CheckBox;
Response.AddHeader("Content-Disposition", "attachment; filename=");
Response.AddHeader("Content-Length", arquivoSelec.Length.ToString());
Response.WriteFile(nomeArquivo.FullName);
Eu consego fazer o download mas quando eu seleciono um item e mando baixar ele mostra a extensao como htm,e o arquivo é txt.
fora isso, falta só configurar para poder baixar mais de 1 arquivo selecionado ao memso tempo!
Agradeço a ajuda de todos, preciso muito terminar esse projeto.
Pera aí, mas você mudou.
Seu arquivoSelec ta pegando o segundo campo da sua grid, só que você não informou qual linha, somente a célula.
Entao, o primeiro campo é o que tem os checkbox, o segundo tem o nome dos arquivos! Como eu faço para especificar as linhas? tentei usar Row mas deu o erro "could be found".
Ao invés do foreach, utilize um for:
for (int i = 0; i < gvr.Rows.Count; i++)
Para pegar todas as linhas, coloque dentro do for:
gvr.Rows[i].Cells[1].Text
Ele nao reconheceu o gvr!!!! e se eu referencio o gvr dai ele nao permiti usar o Row.! tipo:
string arquivoSelec = gvr.Rows.Cells[1].Text;
Eu tentei substituir pelo proprio nome do gridView mas dai ele da erro mais pra frente!
Mas o correto é substituir pelo nome da sua grid. Coloquei grv, pq pensei que fosse esse.
Este erro mais pra frente é pq seu objeto check é nulo.
Mano eu complementei coloquei o .Row no CheckBox check = gvResultadoBusca.Rows.FindControl("chkSelect") as CheckBox;