2009-03-30 21 views
11

Trong ASP.Net có thư mục app_data mà người dùng không thể truy cập qua web. Tôi muốn lưu trữ một tệp trong thư mục này và đọc từ tệp này bằng cách sử dụng một lớp mà tôi có trong thư mục App_Code.Truy cập tệp trong App_Data từ một lớp trong thư mục App_Code

Hãy nhớ rằng thư mục làm việc hiện tại ở đây sẽ là một thư mục như "c: \", "c: \ windows \ system32 \", v.v. chứ không phải thư mục ứng dụng. Vì vậy, một cái gì đó như "../App_Data/somefile" không hoạt động.

Cần phải có một cái gì đó đơn giản mà tôi bỏ qua về cách truy cập tập tin trong thư mục App_Data programatically

Làm thế nào tôi có thể làm điều này?

Trả lời

19

Bạn có thể truy cập vào thư mục App_Data như vậy:

string appdatafolder = Path.Combine(HttpContext.Current.Request.PhysicalApplicationPath, "App_Data"); 

tôi nhận ra rằng đây sử dụng t đối tượng HttpContext, tuy nhiên, nếu bạn đang viết mã này bên trong một nhà cung cấp thành viên ASP.NET tùy chỉnh (một cái gì đó tôi đã làm cho bản thân mình một số lần), bạn sẽ không có vấn đề bằng cách sử dụng đối tượng HttpContext.

+4

Cảm ơn, điều này đã cho tôi tắt để bắt đầu đúng, tôi đã đi cho HttpContext.Current.Server.MapPath ("~/App_Data/myfilenamehere") cách tiếp cận vì nó dường như dễ đọc hơn. – Brian

+0

@Brian - Vui vì bạn đã sẵn sàng và đang chạy. Tuy nhiên, xem liên kết này liên quan đến hiệu suất của MapPath vs PhysicalApplicationPath: http://dotnetperls.com/Content/PhysicalApplicationPath.aspx Có thể không phải là một vấn đề nếu thỉnh thoảng thỉnh thoảng truy cập, nhưng thật tuyệt khi nhận thức được sự khác biệt về hiệu suất. – CraigTP

6

Bạn nói rằng bạn không có quyền truy cập vào đối tượng ngữ cảnh nhưng không rõ tại sao điều đó lại xảy ra.

Nếu mã của bạn chạy để đáp ứng với yêu cầu thì bạn có thể truy cập vào các bối cảnh như: -

HttpContext.Current 

Không đó bạn có thể tới các đường dẫn vật lý gốc cho các ứng dụng sử dụng: -

HttpRuntime.AppDomainAppPath 
+0

Lớp học của tôi nằm trong lớp dữ liệu không có tham chiếu đến web và thư viện mvc. Lớp dữ liệu này vẫn có thể sử dụng App_Data không? HttpRuntime và HttpContext đều làm cho lớp kiên trì này biết về triển khai web. Cảm ơn –

+0

@ one.beat.consumer: Vâng, mặc dù tôi nghĩ bạn thực sự đã trả lời câu hỏi của riêng bạn. – AnthonyWJones

+0

Không thực sự, tôi chỉ hỏi nó kém - rõ ràng hơn, làm sao lớp lưu trữ của tôi có thể ghi vào thư mục App_Data mà không tham chiếu đến 'System.Web' hoặc bất kỳ thư viện web nào khác? Có các phương pháp khác để chuyển hướng đến thư mục này không? –

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