Can anyone explain the difference between Server.MapPath("."), Server.MapPath("~"), Server.MapPath(@"\") and Server.MapPath("/")?
views:
13264answers:
1
+35
A:
Server.MapPath specifies the relative or virtual path to map to a physical directory.
- 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)
An example:
Let's say you pointed a web site application (http://www.example.com/) to
C:\Inetpub\wwwroot
and installed your shop application (sub web as virtual directory in IIS, marked as application) in
D:\WebApps\shop
If, for example, you call Server.MapPath in following request:
http://www.example.com/shop/product/GetProduct.aspx?id=2342
then,
- 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
If Path starts with either a forward (/
) or backward slash (\
), the MapPath method returns a path as if Path were a full, virtual path.
If Path doesn't start with a slash, the MapPath method returns a path relative to the directory of the request being processed.
Note: in C#, @ is the verbatim literal string operator meaning that the string should be used "as is" and not be processed for escape sequences.
splattne
2008-11-09 10:01:15
Excellent. We've been battling with Server.Bloody.MapPath. Thanks
gbn
2010-05-10 15:16:34