如何把物理路径转换成虚拟路径
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何把物理路径转换成虚拟路径相关的知识,希望对你有一定的参考价值。
1 什么是物理路径?什么是虚拟路径?(1) 例子:
用IIS举个例子:
WEB服务目录是d:\路径
那么用HTTP访问网站根目录的时候,其实访问的是d:\路径,那么其中虚拟路径就是\(根),物理路径就是d:\路径
(2) 我自己的理解:绝对路径一般都是带有磁盘完成路径, 而虚拟路径一般不带有磁盘
2 程序中虚拟路径和物理路径的转化
#region 物理路径和相对路径的转换
//本地路径转换成URL相对路径
private string urlconvertor(string imagesurl1)
string tmpRootDir = Server.MapPath(System.Web.HttpContext.Current.Request.ApplicationPath.ToString());//获取程序根目录
string imagesurl2 = imagesurl1.Replace(tmpRootDir, ""); //转换成相对路径
imagesurl2 = imagesurl2.Replace(@"\", @"/");
//imagesurl2 = imagesurl2.Replace(@"Aspx_Uc/", @"");
return imagesurl2;
//相对路径转换成服务器本地物理路径
private string urlconvertorlocal(string imagesurl1)
string tmpRootDir = Server.MapPath(System.Web.HttpContext.Current.Request.ApplicationPath.ToString());//获取程序根目录
string imagesurl2 = tmpRootDir + imagesurl1.Replace(@"/", @"\"); //转换成绝对路径
return imagesurl2;
#endregion
3 下载的方法
///
/// 获取物理地址
///
public static string MapPathFile(string FileName)
return HttpContext.Current.Server.MapPath(FileName);
///
/// 普通下载
///
/// 文件虚拟路径
public static bool DownLoadold(string FileName)
bool bools = false;
string destFileName = MapPathFile(FileName);
if (File.Exists(destFileName))
FileInfo fi = new FileInfo(destFileName);
HttpContext.Current.Response.Clear();
HttpContext.Current.Response.ClearHeaders();
HttpContext.Current.Response.Buffer = false;
HttpContext.Current.Response.AppendHeader("Content-Disposition", "attachment;filename=" + HttpUtility.UrlEncode(Path.GetFileName(destFileName), System.Text.Encoding.UTF8));
HttpContext.Current.Response.AppendHeader("Content-Length", fi.Length.ToString());
HttpContext.Current.Response.ContentType = "application/octet-stream";
HttpContext.Current.Response.WriteFile(destFileName);
HttpContext.Current.Response.Flush();
HttpContext.Current.Response.End();
bools = true;
return bools;
public static void ResponseFile(string path, HttpContext context)
context = HttpContext.Current;
System.IO.Stream iStream = null;
byte[] buffer = new Byte[10000];
int length;
long dataToRead;
string filename = System.IO.Path.GetFileName(path);
try
iStream = new System.IO.FileStream(path, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read);
dataToRead = iStream.Length;
context.Response.ContentType = "application/octet-stream";
context.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(filename, System.Text.Encoding.UTF8));
while (dataToRead > 0)
if (context.Response.IsClientConnected)
length = iStream.Read(buffer, 0, 10000);
context.Response.OutputStream.Write(buffer, 0, length);
context.Response.Flush();
buffer = new Byte[10000];
dataToRead = dataToRead - length;
else
dataToRead = -1;
catch (Exception ex)
context.Response.Write(ex.Message);
finally
if (iStream != null)
iStream.Close();
public static void ResponseFile(string path, string fileName, HttpContext context)
context = HttpContext.Current;
System.IO.Stream iStream = null;
byte[] buffer = new Byte[10000];
int length;
long dataToRead;
try
iStream = new System.IO.FileStream(path, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.Read);
dataToRead = iStream.Length;
context.Response.ContentType = "application/octet-stream";
context.Response.AddHeader("Content-Disposition", "attachment; filename=" + HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8));
while (dataToRead > 0)
if (context.Response.IsClientConnected)
length = iStream.Read(buffer, 0, 10000);
context.Response.OutputStream.Write(buffer, 0, length);
context.Response.Flush();
buffer = new Byte[10000];
dataToRead = dataToRead - length;
else
dataToRead = -1;
catch (Exception ex)
context.Response.Write(ex.Message);
finally
if (iStream != null)
iStream.Close();
参考技术A //本地路径转换成URL相对路径
private string urlconvertor(string imagesurl1)
string tmpRootDir = Server.MapPath(System.Web.HttpContext.Current.Request.ApplicationPath.ToString());//获取程序根目录
string imagesurl2 = imagesurl1.Replace(tmpRootDir, ""); //转换成相对路径
imagesurl2 = imagesurl2.Replace(@"\", @"/");
return imagesurl2;
//相对路径转换成服务器本地物理路径
private string urlconvertorlocal(string imagesurl1)
string tmpRootDir = Server.MapPath(System.Web.HttpContext.Current.Request.ApplicationPath.ToString());//获取程序根目录
string imagesurl2 = tmpRootDir + imagesurl1.Replace(@"/", @"\"); //转换成绝对路径
return imagesurl2;
参考技术B //本地路径转换成URL相对路径privatestring urlconvertor(string imagesurl1) string tmpRootDir = Server.MapPath(System.Web.HttpContext.Current.Request.ApplicationPath.ToString());//获取程序根目录string imagesurl2 = imagesurl1.Replace(tmpRootDir, ""); //转换成相对路径 imagesurl2 = imagesurl2.Replace(@"\", @"/"); return imagesurl2; //相对路径转换成服务器本地物理路径privatestring urlconvertorlocal(string imagesurl1) string tmpRootDir = Server.MapPath(System.Web.HttpContext.Current.Request.ApplicationPath.ToString());//获取程序根目录string imagesurl2 = tmpRootDir + imagesurl1.Replace(@"/", @"\"); //转换成绝对路径return imagesurl2; 本回答被提问者采纳
C#中网站根路径、应用根路径、物理路径、绝对路径,虚拟路径的区别
../是写在客户端的,浏览器可以识别,并帮你找到相应的文件,~/代表的是网站的根目录,这个要写在服务器端,也就是c#代码中,浏览器是不能识别的。
相对路径是虚拟路径,物理路径就是真实路径(也就是在服务器本地的路径),比如说你的网站存放在你的d盘。那么你的网站的物理路径就是d:\网站。。。类似这样的,而你在代码中写网站的虚拟路径就可以直接写~/就是网站的根目录了。。。。不知道说的是否明白。。 参考技术A C#中网站根路径,请站点的最外一层
/表示
应用根路径
~/表示,有时候C#程序路径并不是网站路径
物理路径
server.mappath("~/")
是指应用程序放在服务器硬盘的位置
c:\aaa\bbb\ccc
绝对路径:是指以网站根路径为起点页面的位置
/aa/bb/cc/a.aspx
相对路径:是以当前页面的起点目标页面的位置
如当前页面是
/aa/bb/b.aspx
要找
/aa/bb/cc/a.aspx
路径应该是cc/a.aspx
如果要找aa文件夹里的东西就用../xx.aspx
以上是关于如何把物理路径转换成虚拟路径的主要内容,如果未能解决你的问题,请参考以下文章