gpt4 book ai didi

c# - 在路径中使用 "~"解析为 C :\

转载 作者:行者123 更新时间:2023-11-30 15:50:47 25 4
gpt4 key购买 nike

我正在尝试实现一个服务器控件,该控件可以在 ASP.NET 站点的 Web 目录中删除几个文件。我使用 VS Web Dev Express 2008 作为我的 IDE。当我调用 HttpContext.Current.Request.ApplicationPath 获取 Web 根目录的路径以便找到这些文件时,它返回 C:。什么鬼?

绝对路径工作得很好,但我希望能够为服务器控件提供一个相对目录,让它做这件事。我做错了什么?

public String Target
{
get { return _target; }
set
{
if (value.StartsWith("~"))
{
// WTF? Gives me C:\? Why?
_target = HttpContext.Current.Request.ApplicationPath +
value.Substring(1);
}
else
{
_target = value;
}
}
}

private String _target;

protected override void Render(HtmlTextWriter writer)
{
HtmlControl wrapper = new HtmlGenericControl("div");
int fileCount = 0;

try
{
DirectoryInfo dir = new DirectoryInfo(_target);
foreach (FileInfo f in dir.GetFiles())
{
fileCount++;
a = new HtmlAnchor();
a.Attributes.Add("href", f.FullName);
a.InnerHtml = f.Name;
wrapper.Controls.Add(a);
}
}
catch (IOException e)
{
throw e;
}

Controls.Add(wrapper);
base.Render(writer);
}

最佳答案

这可能是因为它使用的是开发 Web 服务器,它可以只提供硬盘驱动器上任何目录中的文件。它没有任何特定的根。你能不能在 IIS 下运行你的项目(假设你的 windows 版本支持它),看看你是否得到相同的结果?

要完全解决这个问题,您可以在 web.config 中硬编码您想要查看的路径,并解决 Request.ApplicationPath 返回的任何问题。

[编辑]

刚刚发现你可以使用

HTTPContext.Current.Request.ServerVariables("APPL_PHYSICAL_PATH")

返回您的应用程序在硬盘上的路径。我很确定这就是您要找的东西。如果那不对,请检查所有其他 ServerVariables看看你是否能得到你正在寻找的东西。

关于c# - 在路径中使用 "~"解析为 C :\,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/169477/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com