c# - 如何设置我试图打开的文件的路径以在托管时打开而不是依赖于 ASP.net 的本地主机目录?
问题描述
我正在构建一个处理 2 个文件(如 .txt 之类的简单文件)的网站,我正在努力了解如何以最终托管网站时的工作方式编写路径。目前,我使用这行代码只是为了让它在我解决它时工作:
File.ReadAllLines(@"C:\Users\pinky\source\repos\PAP\PAP\files\filename.txt");
但是当我尝试为以下代码更改它时:
File.ReadAllLines("/files/filename.txt");
它停止工作。奇怪的是,它只对我更改文件路径的特定页面停止工作。如果我尝试调试它,它会给出错误 404 并询问我是否有正确的页面路径(它是)。我能做些什么来改变这一点?
解决方案
好的,所以,在您的网站中,您有根目录,然后是一些文件夹。
我们假设文件是这些文件夹之一。
第 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 文件名!
因此,在您的情况下,要获取文本文件,我们可以(您应该试试这个)输入以下内容:
推荐阅读
- rest - RESTful API 设计 - CRUD op。& 可选操作,都在一个请求中?
- javascript - 如何在对象javascript中按键分组值
- python - 计算摄像机视角
- windows - 无法通过 cmd 拉取和推送到 git
- python - 避免插入那些已经在 SQL 表中的记录
- node.js - 从nodejs插入表单数据到mongodb
- c++ - UE4:随机生成继承自单个 C++ 类的蓝图类actor
- mysql - 选择带有条件的 group_concat
- c++ - g++优化使程序无法运行
- python - AWS-Code-commit-repository 备份,包括多个分支和提交历史