2012-06-08 35 views
78

Vì vậy, tôi có một dự án web và tôi đang cố gắng lấy thư mục gốc của trang web bằng cách sử dụng phương thức C# Directory.GetCurrentDirectory(). Tôi không muốn sử dụng đường dẫn tĩnh vì vị trí tệp sẽ thay đổi trong tương lai. Phương pháp này được chạy trong file imageProcess.aspx.cs của tôi, nhưng mà tôi nghĩ rằng nó sẽ trở về:Lấy thư mục hiện tại trong ứng dụng web .NET

C:\Users\tcbl\documents\visual studio 2010\Projects\ModelMonitoring\ModelMonitoring\imageProcess.aspx.cs 

Tôi đang thay vì nhận được:

C:\Program Files\Common Files\Microsoft Shared\DevServer\10.0\ 

bất cứ ai có thể giải thích lý do tại sao điều này xảy ra và những gì một giải pháp có thể là gì? Cảm ơn rất nhiều.

+0

Bài liên quan [ở đây] (https://stackoverflow.com/q/6041332/465053) nói về đường dẫn thực thi ứng dụng .Net nói chung. – RBT

+0

Một bài đăng khác nói về [đường dẫn bản đồ máy chủ trong các ứng dụng web trong. Net] (https://stackoverflow.com/q/275781/465053) – RBT

Trả lời

155

Thư mục hiện tại là một tính năng cấp hệ thống; nó trả về thư mục mà máy chủ được khởi chạy từ đó. Nó không có gì để làm với trang web.

Bạn muốn HttpRuntime.AppDomainAppPath.

Nếu bạn đang trong yêu cầu HTTP, bạn cũng có thể gọi Server.MapPath("~/Whatever").

+0

Cảm ơn. Tôi đã thực sự tìm kiếm 'HttpRuntime.BinDirectory', nhưng đó là dễ dàng để xác định trong trình gỡ rối, một khi tôi đã thử những gì bạn đã đề cập trong câu trả lời của bạn. –

+0

Nếu tôi sử dụng 'Server.MapPath (" ~ Dù ") và trang web IIS được lưu trữ trong http: // myserver. Tôi nhận được một C: \\ somefolder \ Dù, thay vì http: // myserver/Dù thư mục. – Si8

+0

@ Si8: Có; đó là những gì 'Server.MapPath' làm. Bạn muốn http://stackoverflow.com/q/5823847/34397 – SLaks

71

Sử dụng mã này:

HttpContext.Current.Server.MapPath("~") 

Chi tiết tham khảo:

Server.MapPath xác định đường dẫn tương đối hoặc ảo để ánh xạ vào một thư mục vật lý.

  • Server.MapPath(".") trả về thư mục hiện vật lý của file (ví dụ aspx) đang được thực thi
  • Server.MapPath("..") trả về thư mục cha
  • Server.MapPath("~") trả về đường dẫn vật lý vào thư mục gốc của ứng dụng
  • Server.MapPath("/") lợi nhuận đường dẫn vật lý vào thư mục gốc của tên miền (không nhất thiết phải giống như thư mục gốc của ứng dụng )

Một ví dụ:

Hãy nói rằng bạn chỉ một ứng dụng web site (http://www.example.com/) để

C:\Inetpub\wwwroot 

và cài đặt ứng dụng cửa hàng của bạn (web phụ như thư mục ảo trong IIS, đánh dấu là ứng dụng) trong

D:\WebApps\shop 

Ví dụ: nếu bạn gọi Server.MapPath trong yêu cầu sau:

http://www.example.com/shop/products/GetProduct.aspx?id=2342 

thì:

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 

Nếu đường dẫn bắt đầu với một trong hai tiền đạo (/) hoặc dấu gạch chéo ngược(), phương pháp MapPath trả về một con đường như thể con đường là một đầy đủ, đường dẫn ảo.

Nếu đường dẫn không bắt đầu bằng dấu gạch chéo, phương thức MapPath trả về đường dẫn liên quan đến thư mục của yêu cầu đang được xử lý.

Lưu ý: trong C#, @ là toán tử chuỗi chữ đúng nguyên văn có nghĩa là chuỗi nên được sử dụng "nguyên trạng" và không được xử lý cho chuỗi thoát.

Chú thích

Server.MapPath(null)Server.MapPath("") sẽ tạo ra hiệu ứng này quá.

+0

Hoàn hảo! Chỉ cần những gì tôi đang tìm kiếm ... –

+4

Bản sao hoàn hảo của https://stackoverflow.com/questions/275781/server-mappath-server-mappath-server-mappath-server-mappath#275791 – GGO

Các vấn đề liên quan