<p>Can anyone explain the difference between <code>Server.MapPath(".")</code>, <code>Server.MapPath("~")</code>, <code>Server.MapPath(@"\")</code> and <code>Server.MapPath("/")</code>?</p>

Server.MapPath
specifies the relative or virtual path to map
to a physical directory
.
```
Server.MapPath(".")
```
1
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
```
```
For example, if you call
```
Server.MapPath()
```
in following request:
```
```
http://www.example.com/shop/products/GetProduct.aspx?id=2342
```
```
then:
```
Server.MapPath(".")
```
1
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 slash (
```
/
```
) or backward slash (
```
\
```
), the
```
MapPath()
```
returns a path as if Path was a full, virtual path.
If Path doesn't start with a slash, the
```
MapPath()
```
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.
Footnotes
```
Server.MapPath(null)
```
and
```
Server.MapPath("")
```
will
produce this effect too
.