Tenho um projeto da web e estou tentando obter o diretório raiz do site usando o método c # Directory.GetCurrentDirectory()
. Não quero usar um caminho estático, pois os locais dos arquivos serão alterados no futuro. Este método está sendo executado em meu arquivo imageProcess.aspx.cs, mas onde pensei que retornaria:
C:\Users\tcbl\documents\visual studio 2010\Projects\ModelMonitoring\ModelMonitoring\imageProcess.aspx.cs
Em vez disso, estou recebendo:
C:\Program Files\Common Files\Microsoft Shared\DevServer\10.0\
Alguém pode explicar por que isso está acontecendo e qual poderia ser uma possível solução? Muito obrigado.
Respostas:
O diretório atual é um recurso de nível de sistema; ele retorna o diretório de onde o servidor foi iniciado. Não tem nada a ver com o site.
Você quer
HttpRuntime.AppDomainAppPath
.Se você estiver em uma solicitação HTTP, também pode ligar
Server.MapPath("~/Whatever")
.fonte
HttpRuntime.BinDirectory
, mas foi fácil de determinar no depurador, depois que tentei o que você mencionou em sua resposta.Server.MapPath
faz. Você deseja stackoverflow.com/q/5823847/34397System.Web.HttpRuntime.AppDomainAppPath
eSystem.Web.HttpRuntime.HttpContext.Server.MapPath("~")
HttpContext
isSystem.Web.HttpContext.Current.Server.MapPath("~")
, not haveHttpRuntime
Use este código:
Referência detalhada:
Server.MapPath
especifica o caminho relativo ou virtual para mapear para um diretório físico.Server.MapPath(".")
retorna o diretório físico atual do arquivo (por exemplo, aspx) sendo executadoServer.MapPath("..")
retorna o diretório paiServer.MapPath("~")
retorna o caminho físico para a raiz do aplicativoServer.MapPath("/")
retorna o caminho físico para a raiz do nome de domínio (não é necessariamente o mesmo que a raiz do aplicativo)Um exemplo:
Digamos que você direcionou um aplicativo de site ( http://www.example.com/ ) para
e instalei seu aplicativo de loja (sub web como diretório virtual no IIS, marcado como aplicativo) em
Por exemplo, se você ligar
Server.MapPath
na seguinte solicitação:então:
Se Path começa com uma barra (/) ou uma barra invertida (), o
MapPath
método retorna um caminho como se Path fosse um caminho virtual completo.Se Path não começa com uma barra, o
MapPath
método retorna um caminho relativo ao diretório da solicitação que está sendo processada.Observação: em C #, @ é o operador literal literal de string, o que significa que a string deve ser usada "como está" e não deve ser processada para sequências de escape.
Notas de rodapé
Server.MapPath(null)
eServer.MapPath("")
produzirá esse efeito também.fonte
System.Web.Hosting.HostingEnvironment.MapPath("~")
vez disso, que funciona muito bem, sem dependência deSystem.Web.HttpContext.Current