GARANTIR DESCONTO

Fórum Pegar o caminho de um arquivo #13580

05/01/2010

0

Boa tarde,   Tenho um webform com um textbox, um botão para procurar um arquivo, e um botão para ler este arquivo.   Quando o usuario clica no botão de procurar, como deveria ser, aparece uma janela para ele selecionar o caminho e o arquivo desejado e dar OK. Quando o arquivo é selecionado e dado OK, o caminho todo aparece na caixa de texto. Quando eu clico no botão para ler o arquivo, ele deve pegar o caminho do arquivo selecionado, mas está pegando o caminho do projeto do sistema que estou fazendo.   Eu preciso pegar o caminho do arquivo, independente de onde o arquivo esteja.   Como eu faço isso?   Segue o código do que estou utilizando:   protected void Upload_Click(object sender, EventArgs e) { // tirar codigo html do nome do arquivo string fileName = Server.HtmlEncode(MyFile.PostedFile.FileName); // Para pegar o novo caminho dado string nomeArq = System.IO.Path.GetFullPath(fileName);  <-- AQUI ELE PEGA O CAMINHO DO SISTEMA // Grava no novo caminho                                                     E NÃO O DO ARQUIVO! MyFile.PostedFile.SaveAs(nomeArq); cImporta.Principal(nomeArq); Label1.Visible = true; }
João Teixeira

João Teixeira

Responder

Posts

05/01/2010

Fabio Mans

Olá João, faça o seguinte.     string caminho = System.IO.Path.GetDirectoryName(FileUpload1.PostedFile.FileName); "FileUpload1 é o nome do meu FileUpload (que você chama de textbox, mas não, o correto é FileUpload), altere com o nome do seu." No exemplo acima caso eu selecione um arquivo no meu Desktop a variável caminho irá receber o seguinte valor. C:\Documents and Settings\f.galante\Desktop Caso precise dividir o diretório faça o seguinte. char[] sep = new char[2]; sep[0] = '\\'; sep[1] = '\\'; string[] Directories = System.IO.Path.GetDirectoryName(FileUpload1.PostedFile.FileName).Split(sep); string DirectoryName = (Directories.Length == 2 && Directories[1].Length == 0) ? Directories[0] : Directories[Directories.Length - 1]; Response.Write("Diretório: <b>" + DirectoryName + "</b>"); Espero ter ajudado Fabio
Responder

Gostei + 0

05/01/2010

João Teixeira

A variavel fica vazia:   protected void Upload_Click(object sender, EventArgs e) { // tirar codigo html do nome do arquivo string fileName = Server.HtmlEncode(MyFile.PostedFile.FileName); <-- Aqui o nome do arquivo está certo // Para pegar o novo caminho dado string nomeArq = System.IO.Path.GetDirectoryName(fileName); <-- Aqui o valor fica "" // Grava no novo caminho MyFile.PostedFile.SaveAs(nomeArq); cImporta.Principal(nomeArq); Label1.Visible = true; }
Responder

Gostei + 0

05/01/2010

Fabio Mans

Você está utilizando UpdatePanel?
Responder

Gostei + 0

05/01/2010

João Teixeira

Não. não uso o update panel neste webform nao.
Responder

Gostei + 0

05/01/2010

Fabio Mans

Faz assim     string caminho = System.IO.Path.GetDirectoryName(FileUpload1.PostedFile.FileName); ao invés de string caminho = System.IO.Path.GetDirectoryName(FileName); Fabio
Responder

Gostei + 0

05/01/2010

João Teixeira

Também vem vazio.
Responder

Gostei + 0

05/01/2010

Fabio Mans

Mas você selecionou um arquivo no FileUpload? Caso contrário vem vazio mesmo.   Manda seu aspx e o aspx.cs   Fabio
Responder

Gostei + 0

06/01/2010

João Teixeira

aspx.cs   using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; using ImportarCI; using System.IO; using System.Web.UI.HtmlControls; public partial class Admin_importaci : System.Web.UI.Page {    private Class1 cImporta = new Class1();    protected void Page_Load(object sender, EventArgs e)    {    }    protected void Upload_Click(object sender, EventArgs e)    {       // tirar codigo html do nome do arquivo       string fileName = Server.HtmlEncode(MyFile.PostedFile.FileName);       // Para pegar o novo caminho dado       string nomeArq = System.IO.Path.GetDirectoryName(MyFile.PostedFile.FileName);       // Grava no novo caminho       MyFile.PostedFile.SaveAs(nomeArq);       cImporta.Principal(nomeArq);       Label1.Visible = true;    } }
Responder

Gostei + 0

06/01/2010

João Teixeira

aspx   <%@ Page Language="C#" AutoEventWireup="true" CodeFile="importaci.aspx.cs" Inherits="Admin_importaci" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> <style type="text/css"> </style> <script language="javascript" type="text/javascript"> function Submit1_onclick() { } </script> </head> <body> <form id="form1" runat="server" method="post" enctype="multipart/form-data"> <div> <table id="TblWebPartes" class="style1" frame="border"> <tr> <td id="TblCellMenu" class="style5" valign="top" align="center" bgcolor="#275C76"> <img alt="" src="../Img/CEG.gif" style="width: 230px; height: 65px" /><img alt="" src="../Img/Titulo.gif" style="width: 530px; height: 65px" /></td> </tr> <tr> <td id="TblCellMenu0" class="style6" valign="top"> <asp:ScriptManager ID="ScriptManager1" runat="server"> </asp:ScriptManager> <asp:SiteMapDataSource ID="SiteMapDataSourceSCM" runat="server" /> <asp:Menu ID="Menu1" runat="server" BackColor="#B5C7DE" DynamicHorizontalOffset="1" Font-Names="Tahoma" Font-Size="Small" ForeColor="#284E98" Orientation="Horizontal" StaticSubMenuIndent="5px" MaximumDynamicDisplayLevels="10" StaticDisplayLevels="2" DataSourceID="SiteMapDataSourceSCM" DynamicVerticalOffset="1" StaticEnableDefaultPopOutImage="False" Font-Bold="False" style="border-top-style: solid; border-top-width: 1px; border-bottom-style: solid; border-bottom-width: 1px; padding: 1px"> <StaticSelectedStyle BackColor="#507CD1" /> <StaticMenuItemStyle HorizontalPadding="5px" VerticalPadding="2px" /> <DynamicHoverStyle BackColor="#284E98" ForeColor="White" /> <DynamicMenuStyle BackColor="#B5C7DE" /> <DynamicSelectedStyle BackColor="#507CD1" /> <DynamicMenuItemStyle HorizontalPadding="5px" VerticalPadding="2px" /> <StaticHoverStyle BackColor="#284E98" ForeColor="White" /> </asp:Menu> </td> </tr> <tr> <td id="TblCellMenu1" class="style3" valign="top"> <p style="margin-bottom: 3px"> <span class="style7">Ol, </span> <asp:LoginName ID="LoginName1" runat="server" CssClass="style7" /> <span class="style7">! </span> <asp:LoginStatus ID="LoginStatus1" runat="server" LogoutPageUrl="~/login.aspx" LogoutAction="RedirectToLoginPage" CssClass="style7" /> <br class="style7" /> <span class="style7">Acesso de Administrador</span></p> <p align="center" lang="pt-br" style="font-weight: bold; margin-top: 3px; margin-bottom: 3px;" class="style8"> IMPORTAO DO CI</p> <p style="border-top: thin solid #336699; margin-top: 0px; margin-bottom: 7px; padding-bottom: inherit;" class="style9"> <span class="style10">Localize o arquivo txt:</span> </p> &nbsp;<br> <%-- A button - when clicked the form is submitted and the Upload_Click event handler is fired... --%>&nbsp; <input id="Submit1" type="Submit" value="Iniciar Importao" OnServerClick="Upload_Click" RunAt="server" onclick="return Submit1_onclick()" /><asp:Label ID="Label1" runat="server" ForeColor="Red" style="z-index: 1; left: 162px; top: 290px; position: absolute; right: 325px; height: 21px; font-size: medium; font-family: Verdana;" Text="Importao efetuada com sucesso !!!" Visible="False" Font-Bold="False"></asp:Label> <input ID="MyFile" type="file" RunAt="server" size="80"/><p> &nbsp;</p> <p> &nbsp;</p> </td> </tr> <tr> <td id="TblCellRodape" align="center" class="style4"> <p class="style9"> CEG, CEG RIO, GNSPS </p> </td> </tr> </table> </div> </form> <%-- The Web Form with the EncType property set to Multipart/Form-Data --%> </body> </html>
Responder

Gostei + 0

06/01/2010

Fabio Mans

João funcionou. Você está selecionando o arquivo? Veja abaixo que estou imprimindo o caminho da minha máquina.     C:\Documents and Settings\f.galante\Meus documentos\DevMedia.txt
C:\Documents and Settings\f.galante\Meus documentos     Importao efetuada com sucesso !!!   protected void Upload_Click(object sender, EventArgs e) { // tirar codigo html do nome do arquivo string fileName = Server.HtmlEncode(MyFile.PostedFile.FileName); Response.Write(fileName + "<br>"); // Para pegar o novo caminho dado string nomeArq = System.IO.Path.GetDirectoryName(MyFile.PostedFile.FileName); Response.Write(nomeArq); // Grava no novo caminho //MyFile.PostedFile.SaveAs(nomeArq); //cImporta.Principal(nomeArq); Label1.Visible = true;   }
Responder

Gostei + 0

06/01/2010

João Teixeira

estranho... continua não vindo nada... voce executou debugando, ou publicou e executou publicado?   deu erro nesta linha em vermelho:   protected void Upload_Click(object sender, EventArgs e) { // tirar codigo html do nome do arquivo string fileName = Server.HtmlEncode(MyFile.PostedFile.FileName); Response.Write(fileName + "<BR>"); // Para pegar o novo caminho dado string nomeArq = System.IO.Path.GetDirectoryName(MyFile.PostedFile.FileName); Response.Write(nomeArq); // Grava no novo caminho MyFile.PostedFile.SaveAs(nomeArq); <-- O método SaveAs está configurado para exigir um caminho com raiz, e o caminho '' não tem raiz. cImporta.Principal(nomeArq); Label1.Visible = true; }
Responder

Gostei + 0

06/01/2010

Fabio Mans

Revendo o seu aspx eu vejo que utiliza um <input ID="MyFile" type="file" RunAt="server" size="80"/> Troca para um FileUpload <asp:FileUpload ID="FileUpload1" runat="server" />   Em seguida crie uma pasta chamada documentos e segui a exemplo abaixo, veja que irá funcionar.       // tirar codigo html do nome do arquivo string fileName = Server.HtmlEncode(FileUpload1.PostedFile.FileName); Response.Write(fileName + "<br>"); // Para pegar o novo caminho dado string nomeArq = System.IO.Path.GetDirectoryName(FileUpload1.PostedFile.FileName); Response.Write(nomeArq); // Grava no novo caminho    //Aqui eu salvo o arquivo na pasta Documentos na raiz do meu projeto. FileUpload1.PostedFile.SaveAs(Server.MapPath("~/Documentos/") + FileUpload1.FileName); //cImporta.Principal(nomeArq); Label1.Visible = true;
Responder

Gostei + 0

06/01/2010

João Teixeira

Consegui de outra forma.   protected void Upload_Click(object sender, EventArgs e) { // tirar codigo html do nome do arquivo string fileName = Server.HtmlEncode(FileUpload1.PostedFile.FileName); // Para criar o novo caminho do arquivo string nomeArq = Server.MapPath("~/Documentos/") + FileUpload1.FileName; // Grava no novo caminho //Aqui eu salvo o arquivo na pasta Documentos na raiz do meu projeto. FileUpload1.PostedFile.SaveAs(Server.MapPath("~/Documentos/") + FileUpload1.FileName); cImporta.Principal(nomeArq); Label1.Visible = true; } eu defini a pasta para guardar o arquivo e salvei este caminho numa string. depois eu utilizo o metodo que eu preciso, para importação e processamento das informações, com a string que possui o caminho certo. parece que deu certo. só falta testar no cliente. Obrigado.
Responder

Gostei + 0

06/01/2010

Fabio Mans

João assim que você tiver o resultado avise por favor para que eu possa fechar o chamado.   Obrigado.  
Responder

Gostei + 0

06/01/2010

João Teixeira

deu certo, muito obrigado.
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar