这可能是令人难以置信的显而易见的东西,但我是c#的新手所以要温柔......
我有一个应用程序(理论上)将文本文件解析为数组。尽管文本文件是aspx文件的对等文件,但我无法获得正确的相对路径。不知道它是否有任何区别(我假设没有),但我正在使用代码隐藏。
我的文件夹结构如下所示:
这是我正在使用的代码:
protected void Page_Load(object sender, EventArgs e)
{
string[] allLines = File.ReadAllLines(@"Albums.txt");
Album[] Albums = new Album[allLines.Length];
for (int i = 0; i < allLines.Length; i++)
{
string[] lineSplit = allLines[i].Split(',');
Albums[i] = new Album();
Albums[i].ID = Convert.ToInt32(lineSplit[0]);
Albums[i].title = lineSplit[1];
Albums[i].keyName = lineSplit[2];
}
}
然而,当我构建它时,我收到错误,说找不到albums.txt,它失败了。
任何指针都会非常感激。
本
答案 0 :(得分:3)
Server.MapPath指定映射到物理目录的相对或虚拟路径。
* Server.MapPath(".") returns the current physical directory of the file (e.g. aspx) being executed
* Server.MapPath("..") returns the parent directory
* Server.MapPath("~") returns the physical path to the root of the application
* Server.MapPath("/") returns the physical path to the root of the domain name (is not necessarily the same as the root of the application)
一个例子:
假设您将网站应用程序(http://www.example.com/)指向
C:\的Inetpub \ wwwroot的
并在
中安装了您的商店应用程序(子网站为IIS中的虚拟目录,标记为应用程序)d:\的WebApp \店
例如,如果您在以下请求中调用Server.MapPath:
http://www.example.com/shop/product/GetProduct.aspx?id=2342
然后,
* Server.MapPath(".") returns D:\WebApps\shop\products
* Server.MapPath("..") returns D:\WebApps\shop
* Server.MapPath("~") returns D:\WebApps\shop
* Server.MapPath("/") returns C:\Inetpub\wwwroot
* Server.MapPath("/shop") returns D:\WebApps\shop
如果Path以正向(/)或反斜杠()开头,则MapPath方法返回路径,就像Path是一个完整的虚拟路径一样。
如果Path不以斜杠开头,则MapPath方法返回相对于正在处理的请求的目录的路径。
注意:在C#中,@是逐字文字字符串运算符,意味着字符串应该“按原样”使用,不能为转义序列处理。
答案 1 :(得分:2)
使用Server.MapPath(filename)
来获取文件的完整路径,而不仅仅是文件名。
如果文件位于其他目录中,则可以使用Server.MapPath("~/path/to/the/file.txt")
,其中〜对应于Web应用程序的根文件夹。
答案 2 :(得分:1)
ReadAllLines 采用绝对路径 - 您提供的是相对路径。 Server.MapPath 用于将相对路径转换为绝对路径。无论代码位于何处, Server.MapPath(“〜/ Albums.txt”)都会给出正确的值。此外,通过将文件放在〜\ App_Data \下,您可以阻止直接下载文件本身,以及在应用程序运行时使应用程序不会对该文件的重复更新进行隔离(更新 App_Data 内容不生成文件更改通知)。