当前位置: 首页 > news >正文

Server.MapPath和Request.PhysicalApplicationPath的异同

很多人对它们都不陌生,在众多的WEB程序中,使用Server.MapPath和Request.PhysicalApplicationPath来操作目录/文件的几率参半,我曾经也经常混用,然而时间久了。发现Request.PhysicalApplicationPath有点“麻烦”?
其实在一般的应用程序中,感觉不到两者的区别,而在一些存在“虚拟目录”、存在多级子目录、需要虚拟目录相互文件操作的站点中,就可以知道它们的区别了。我的总结如下:
1、相对当前路径的文件操作:
可以使用Server.MapPath("test.txt")、Server.MapPath("a/test.txt")、Server.MapPath("../b/test.txt"),这个时候使用Request.PhysicalApplicationPath就很难定位到文件;
2、绝对路径的文件操作:
这个时候两者都可以,有点注意的是Server.MapPath中的绝对是“面向”站点而言的,不会因为“虚拟目录”本身的属性不同而变化,Request.PhysicalApplicationPath就并非如此。
打个比方:主站点指向D:\wwwroot\,虚拟目录指向E:\wwwroot\a\,取名为a。
那么如果我要操作虚拟目录下的E:\wwwroot\a\test.txt,可以使用Server.MapPath("/a/test.txt"),又或者直接使用Server.MapPath("~/test.txt");
那么用Request.PhysicalApplicationPath该怎么写?
很多人数是:Request.PhysicalApplicationPath + "test.txt",我说不一定,为什么?
因为要是该虚拟目录有单独的应用池,Request.PhysicalApplicationPath就是E:\wwwroot\a\,后面加上test.txt就是E:\wwwroot\a\test.txt;
但要是该虚拟目录没有单独的应用池,Request.PhysicalApplicationPath就是D:\wwwroot\,不管你后面怎么加,都定位不到我要找到文件了。呵呵……

3、跨虚拟目录的文件操作:
比如我现在要操作虚拟目录b下的test2.txt文件,使用Server.MapPath("/b/test2.txt")就没有问题(前提是我有操作权限,没有权限是另外一回事)。
而Request.PhysicalApplicationPath根本就无法找到其他的虚拟目录下的文件,不信谁试试,再告诉我方法?!!!
  

转载于:https://www.cnblogs.com/MrWby/p/4349962.html

相关文章:

  • 滴滴 Elasticsearch 多集群架构实践
  • php实现猴子选大王
  • 报错:exec:gcc executable file not found in %PATH%
  • 趣味集算:数独
  • Python学习(三)流程控制
  • OpenGL学习(3)——Shader(补)
  • WebService到底是什么?
  • Java基础教程(24)--集合
  • 网页Gzip
  • 阿里云服务器防火墙相关命令
  • struts_22_xwork校验器列表使用说明
  • 洛谷 P1126 机器人搬重物
  • 自定义starter
  • 【转】js onclick用法:跳转到指定URL
  • 从0到1实现一个模块间通信的服务组件
  • 3.7、@ResponseBody 和 @RestController
  • Flannel解读
  • gitlab-ci配置详解(一)
  • in typeof instanceof ===这些运算符有什么作用
  • JavaScript 基本功--面试宝典
  • jquery ajax学习笔记
  • laravel5.5 视图共享数据
  • Redis在Web项目中的应用与实践
  • Sublime Text 2/3 绑定Eclipse快捷键
  • Vue2.x学习三:事件处理生命周期钩子
  • 漂亮刷新控件-iOS
  • 什么软件可以剪辑音乐?
  • 世界上最简单的无等待算法(getAndIncrement)
  • 运行时添加log4j2的appender
  • ​LeetCode解法汇总1410. HTML 实体解析器
  • #includecmath
  • #pragma once与条件编译
  • ${ }的特别功能
  • $GOPATH/go.mod exists but should not goland
  • (01)ORB-SLAM2源码无死角解析-(66) BA优化(g2o)→闭环线程:Optimizer::GlobalBundleAdjustemnt→全局优化
  • (3)nginx 配置(nginx.conf)
  • (4.10~4.16)
  • (附源码)ssm高校志愿者服务系统 毕业设计 011648
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (附源码)ssm教师工作量核算统计系统 毕业设计 162307
  • (接口封装)
  • (论文阅读22/100)Learning a Deep Compact Image Representation for Visual Tracking
  • (五) 一起学 Unix 环境高级编程 (APUE) 之 进程环境
  • **登录+JWT+异常处理+拦截器+ThreadLocal-开发思想与代码实现**
  • .halo勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .net 4.0发布后不能正常显示图片问题
  • .net framework4与其client profile版本的区别
  • .NET 动态调用WebService + WSE + UsernameToken
  • .net 发送邮件
  • .NET国产化改造探索(三)、银河麒麟安装.NET 8环境
  • .pop ----remove 删除
  • :O)修改linux硬件时间
  • @CacheInvalidate(name = “xxx“, key = “#results.![a+b]“,multi = true)是什么意思
  • @property @synthesize @dynamic 及相关属性作用探究
  • @requestBody写与不写的情况