首页 > 解决方案 > 如何设置我试图打开的文件的路径以在托管时打开而不是依赖于 ASP.net 的本地主机目录?

问题描述

我正在构建一个处理 2 个文件(如 .txt 之类的简单文件)的网站,我正在努力了解如何以最终托管网站时的工作方式编写路径。目前,我使用这行代码只是为了让它在我解决它时工作:

File.ReadAllLines(@"C:\Users\pinky\source\repos\PAP\PAP\files\filename.txt");

但是当我尝试为以下代码更改它时:

File.ReadAllLines("/files/filename.txt");

它停止工作。奇怪的是,它只对我更改文件路径的特定页面停止工作。如果我尝试调试它,它会给出错误 404 并询问我是否有正确的页面路径(它是)。我能做些什么来改变这一点?

标签: c#asp.netfile

解决方案


好的,所以,在您的网站中,您有根目录,然后是一些文件夹。

我们假设文件是​​这些文件夹之一。

第 1 课:

当用户(或您)想要使用 URL 时,当然 URL 是

www.mywebsite/Files/dogs.png

因此,请记住在 HTML 标记、src 等中说的内容。然后始终假定路径名是从您网站的根目录开始的。

但是,尽管上面的 CODE BEHIND 仍然会始终使用有效的 windows FULL PATHNAME 文件。

因此,您使用一个名为 server.MapPath 的内置函数

MapPath 将采用基于 Web 的 url,并转换为完整的内部 Windows 路径名。

因此,您的代码将是这样的:

       string strIntenalFileName = Server.MapPath("/files/data.txt");

        string MyText = File.ReadAllText(strIntenalFileName);

        TextBox1.Text = MyText;

所以请记住,说我们想要设置一个图像控件以从上方获取图片。

好吧,那么我们这样做:

        Image1.ImageUrl = "/files/dogs.png";

但是,如果您需要在后面的代码中读取文件,那么我们必须通过 Server.MapPath() 将上面的表达式转换为后面的代码。

所以,只要记住在处理 Web 控件、HTML 标记时,URL 和路径名当然是基于 Web 的。但是,为了让后面的代码直接接口和使用文件,后面的代码需要那个“平面简”和完整的合法 Windows 路径名。

因此,对于您的示例,将字符串包装在 Server.MapPath(" your web based path goes here") 中。

实际上,您实际上并不知道虚拟主机服务器的根路径名,但是有了上面的内容,您真的不在乎。

然而,经常有人会“搞砸”。由于对于上面的图像,我推入了 SCR 的基于 Web 的 URL。但是,如果我要读取图片并将图片字节流式传输到 Web 控件,那么我当然会首先转换/获取完整的 Windows 路径名。

以上内容并没有那么令人困惑,但是在代码中保留这个“web url”、“web 标记”和直接文件使用仍然是一个非常好的概念,可以在处理文件时牢记于心。

现在,以上是一个简单的提示——但我希望它被锤击回家。

所以:网络表达式,标记=来自网络根目录的网络路径名。

后面的代码:

仍然必须是完整的平面简 Windows 文件名!

因此,在您的情况下,要获取文本文件,我们可以(您应该试试这个)输入以下内容:


推荐阅读